1

我正在复习我的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

4 回答 4

4

你必须使用:

text_area.onkeyup = countDown;

没有括号。

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

countDown()实际上调用该函数,并评估它返回的任何内容。

于 2013-03-27T22:20:08.083 回答
3

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

试试这个:

text_area.onkeyup = countDown;
于 2013-03-27T22:19:59.220 回答
2

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

text_area.onkeyup = countDown;
于 2013-03-27T22:19:58.110 回答
2

问题是您在分配期间执行函数,因此函数的返回值附加到事件。相反,您应该附上参考:

text_area.onkeyup = countDown

或者,如果 countdown 有您想要传递的参数,那么您可以使用 afunction来确保它们不会丢失。像这样的东西:

text_area.onkeyup = function(){ countDown(paremeter1, paremeter2); }
于 2013-03-27T22:21:15.037 回答