2

在 jQuery 手册本身中,它显示了blur函数:

.blur(handler(eventObject)) // PLUS 2 OTHER VARIATIONS 

所以对我来说使用这个函数你会得到这样的东西:

<!DOCTYPE html>
<html>
  <head>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
  </head>
  <body>
    <form>
      <input id="target" type="text" value="Field 1" />
      <input type="text" value="Field 2" />
    </form>
    <div id="other">Trigger the handler</div>
    <script>
      $('#target').blur(myhandler(evObj));

      function myhandler(evObj) {
        console.log(evObj);
      };
    </script>
  </body>
</html>

$('#target').blur(myhandler(evObj));不是正确的语法正确的语法是真的$('#target').blur(myhandler);

所以总体上脚本标签的整个代码应该是:

<script>
  $('#target').blur(myhandler);

  function myhandler(e) {
    console.log(e);
  };
</script>
  1. 为什么会这样?
  2. 一个人怎么知道不写.blur(handler(eventObject))
4

2 回答 2

3

你是对的,技术上正确的语法是

blur(handler)

但是,这实际上并不是很有用,因为如果您正在查看文档,您可能想知道处理程序接收哪些参数。很明显,您blur使用函数作为其唯一参数进行调用,因此 jQuery docs par abus de notation写道

blur(handler(eventObj))

表示处理函数接受一个参数,即事件对象。

于 2013-01-10T12:55:26.023 回答
1

在 JavaScript 中,函数只是另一种对象。您偶然发现了写作myfunction和写作之间的巨大差异myfunction()——第一个是函数对象,第二个是该函数的返回值。

所以:$('#target').blur(...)是一种接受一个对象的方法,它必须是一个函数。

当你写的时候$('#target').blur( myhandler(evObj) )myhandler 函数没有传递给.blur(). 相反,它后面的括号告诉 JavaScript 评估函数(使用参数evObj),然后将函数的返回值传递给.blur()

如果该返回值恰好是另一个函数对象,那么一切都很好。但如果没有,你会得到一个错误。

但是,通常开发人员不会声明单独的函数myhandler。相反,我们将使用这样的匿名函数

$('#target').blur(function(evObj) {
    /* do stuff with evObj */
})

就是 API 文档编写的原因$('#target').blur( myhandler(evObj) )——以便开发人员知道匿名处理函数接受哪些参数。

于 2013-01-10T14:25:10.333 回答