在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>
.blur(handler(eventObject))
吗?答案 0 :(得分:3)
你是正确的,技术上正确的语法是
blur(handler)
然而,这实际上并不是非常有用,因为如果您正在查看文档,您可能想知道处理程序接收的参数。显而易见的是,您使用函数作为唯一参数调用blur
,因此jQuery文档 par abus de notation 写
blur(handler(eventObj))
表示处理函数采用一个参数,即事件对象。
答案 1 :(得分: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) )
的原因 - 所以开发人员知道匿名处理函数接受了哪些参数。