繁体   English   中英

将参数传递给绑定函数

[英]Pass parameter to bound function

我遇到了一个问题,我想将'event'参数传递给从JQuery eventListener调用的函数。

$('#todoRemove').on('click', this.removeTask(event));

加载页面后,此函数立即调用该函数,然后在按下将启动事件的按钮时不起作用。 我可以进行哪些更改,使其在原型中调用方法但传递事件参数?

    TaskCtrlr.prototype = {
    init: function () {
        this.setupEventHandlers();
    },
    setupEventHandlers: function () {
        $('#addTask').on('click', this.addTask.bind(this));
        $('#todoRemove').on('click', this.removeTask.bind(this));
/*      $('#todoComplete').on('click', this.completeTask.bind(this));
        $('#doneRemove').on('click', this.removeTask.bind(this));*/
    },
    addTask: function () {
        let taskInput = this.view.getTaskInput();

        let newTask;
        if (this.model.tasks.todo.length == 0) {
            newTask = new Task(0, taskInput.title, taskInput.desc, false);
        } else {
            let id = this.model.tasks.todo[this.model.tasks.todo.length - 1].id + 1;
            newTask = new Task(id, taskInput.title, taskInput.desc, false);
        }

        this.model.addTask(newTask);
        this.view.addTodoTask(newTask);
    },
    completeTask: function (event) {
        console.log('wwwwww');
        console.log(event.target.id);
    },
    removeTask: function (event) {
        console.log('eeeeee');
        console.log(event.target.id);
    }
};

编辑:当前解决方案

$('#todoRemove').on('click', event, removeTask);

错误:

jQuery.Deferred异常:未定义removeTask ReferenceError:未定义removeTask

您为什么要通过event 它甚至指的是什么?

事件对象由事件处理程序的调用者jQuery传递。 您应该执行与其他处理程序完全相同的操作:

$('#todoRemove').on('click', this.removeTask.bind(this));

jQuery会将事件对象传递给函数,而您无需执行任何操作。

当页面加载时,这立即调用该函数

$('#todoRemove').on('click', this.removeTask(event));

是的,它会调用它,因为在注册回调时,您并不是真正在注册回调,而是使用以下代码调用函数:

this.removeTask(event)

相反,您需要执行此操作。 我不确定是什么事件,但是可以使用第二个参数将某些东西传递给回调:

$('#todoRemove').on('click', event, removeTask);

您可以这样定义removeTask

function removeTask( event ) {
  //...
}

这是一个让您感到舒适的示例:

function greet( event ) {
  alert( "Hello " + event.data.name );
}
$( "button" ).on( "click", {
  name: "Karl"
}, greet );   

如果您不传递任何内容,jQuery仍将向您传递一个包含事件信息的参数,如下所示:

function greet2( event ) {
  alert( "Hello " + event.target.id );
}
$( "button" ).on( "click", greet2 );

还有更多的信息在这里

<==摆弄我==>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM