如何将匿名函数传递给Jquery的点击处理程序

时间:2019-03-17 08:00:48

标签: javascript jquery

我下面有一段使用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()的方式不相同?

2 个答案:

答案 0 :(得分:4)

这两个代码都使用匿名函数,但是在第二个过程中,当您应该传递时,您尝试分配click属性.click 方法

的箭头功能
$('#nextstep').click(() => {
  if (canAdvanceAutomaton) {
    runAutomaton(logicalGrid);
  }
});

答案 1 :(得分:1)

两件事:

  1. 您的第一个函数是匿名的。您的第二个也是匿名。它们之间的唯一区别是,第一个是传统函数,第二个是箭头函数(它没有自己的this绑定)。 this answer中有关函数的各种不同形式(命名和匿名)的更多信息。

  2. 第二件事的问题是您不是打电话 click,而是您是分配给 click。< / p>

如果将箭头函数传递到click中,它将起作用,但是函数中的this不会是单击的元素。 (不过,您仍然可以从currentTarget上收到它的事件对象中获取它。)

$('#nextstep').click((e) => {
    // You can use `e.currentTarget` to know which was clicked
    if (canAdvanceAutomaton) {
        runAutomaton(logicalGrid);
    }
});