我遇到了一个问题,我想将一个'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 exception: removeTask is not defined ReferenceError: removeTask is not defined
的情况下可以让我得到具体的DOM元素触发该事件,从那里我计划去了parentnodes获取该元素将其删除。 –
这是正确的。绑定处理程序时不需要提及'event',jQuery通过它。你只需要在函数定义中有'event'参数,就可以了。 – Barmar
@SeanCuvanov:正如我所说,它是jQuery将事件对象传递给你的函数,而不是你。你不是(应该是)调用事件处理程序,jQuery是。你正在告诉jQuery:“这里采用这个函数,并在事件发生时调用它”。 –