我下面有一段使用Jquery的click()
事件处理程序的代码。
//advance automaton by one step
$('#nextstep').click(function() {
if (canAdvanceAutomaton) {
runAutomaton(logicalGrid);
}
});
我认为.click()
接受匿名函数,因此我尝试将代码更改为以下代码。
//advance automaton by one step
$('#nextstep').click = () => {
if (canAdvanceAutomaton) {
runAutomaton(logicalGrid);
}
};
我相信这两段代码是等效的,但是事实证明,当我用canAdvanceAutomaton
单击html id时,后一版本没有运行我的#nextstep
函数,但是我没有在控制台中查看任何错误。谁能告诉我为什么这两种调用.click()
的方式不相同?
答案 0 :(得分:4)
这两个代码都使用匿名函数,但是在第二个过程中,当您应该传递时,您尝试分配到click
属性.click
方法:
$('#nextstep').click(() => {
if (canAdvanceAutomaton) {
runAutomaton(logicalGrid);
}
});
答案 1 :(得分:1)
两件事:
您的第一个函数是匿名的。您的第二个也是也匿名。它们之间的唯一区别是,第一个是传统函数,第二个是箭头函数(它没有自己的this
绑定)。 this answer中有关函数的各种不同形式(命名和匿名)的更多信息。
第二件事的问题是您不是打电话 click
,而是您是分配给 click
。< / p>
如果将箭头函数传递到click
中,它将起作用,但是函数中的this
不会是单击的元素。 (不过,您仍然可以从currentTarget
上收到它的事件对象中获取它。)
$('#nextstep').click((e) => {
// You can use `e.currentTarget` to know which was clicked
if (canAdvanceAutomaton) {
runAutomaton(logicalGrid);
}
});