简化variable.handler = function {}

时间:2013-03-27 22:18:39

标签: function client-side javascript

我正在刷我的JS,我完全不知道如何问这个问题。

我有这个:

text_area.onkeyup = function() {
  var text_length    = this.value.length;
  var text_remaining = text_max - text_length;

  feed_back.innerHTML = "<strong>" + text_remaining + "</strong> charactres remaining";
} 

有效。但是,我是否应该能够使用该功能并将其拉出来?

function countDown() {
  var text_length    = this.value.length;
  var text_remaining = text_max - text_length;

  feed_back.innerHTML = "<strong>" + text_remaining + "</strong> charactres remaining";
}

只是按名称调用函数?

text_area.onkeyup = countDown();

在多个项目中,从不为我工作。

应该吗?为什么不呢?

4 个答案:

答案 0 :(得分:4)

你必须使用:

text_area.onkeyup = countDown;

没有括号。

countDown是对实际函数对象countDown的引用。它只是一个引用,不会调用或执行该函数。

countDown()实际上调用函数,并计算它返回的内容。

答案 1 :(得分:3)

它不起作用,因为()实际上调用了函数 - 有效地将text_area.onkeyup设置为countDown的返回值而不是函数本身。

请改为尝试:

text_area.onkeyup = countDown;

答案 2 :(得分:2)

它不应该因为您分配函数调用的结果而不是函数引用。应该是:

text_area.onkeyup = countDown;

答案 3 :(得分:2)

问题是您在赋值期间执行了该函数,因此函数的返回值将附加到事件中。相反,你应该附上一个参考:

text_area.onkeyup = countDown

或者,如果倒计时具有您想要传递的参数,那么您可以使用function来确保它们不会丢失。像这样:

text_area.onkeyup = function(){ countDown(paremeter1, paremeter2); }