我正在浏览一些jQuery教程,但我似乎无法找到这种混淆的灵感。
<div id="container">
<a href="#">Click Me</a>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
<script>
function doSomthing(){
aMessage = message;
console.log(this);
console.log(aMessage);
}
$('a').on('click', doSomthing)
</script>
当用户点击锚标记并运行doSomthing函数时,查看上面的代码。
然而,我不明白为什么,如果代码更改为以下(将括号添加到doSomthing),doSomthing函数会立即运行而不会单击锚标记。
$('a').on('click', doSomthing())
此外,如果我想在点击时运行doSomthing时传递参数,会发生什么。例如
<div id="container">
<a href="#">Click Me</a>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
<script>
function doSomthing(message){
console.log(this);
console.log(message);
}
$('a').on('click', doSomthing('face bash'))
</script>
我通常期望在点击锚标记之后控制台会记录'this'和传递的字符串,但是doSomthing函数会在页面加载时运行,而不是在单击锚标记时运行:小号
如何正常地将参数传递给通过其他函数调用的函数:S?
答案 0 :(得分:3)
也许试试
$('a').on('click', function(){
doSomthing('face bash');
})
答案 1 :(得分:0)
您需要从函数返回一个新函数:
function doSomthing(message) {
return function() {
console.log(this);
console.log(message);
};
}
由于您将调用doSomthing
的结果传递给.click
,因此结果必须是undefined
以外的函数。
$('a').on('click', doSomthing('face bash'))
保持原样。
或者你可以让doSomthing
保持正确,proxy(Currying仍未记录,需要jQuery 1.6+)它:
$('a').on('click', $.proxy(doSomthing, null, "face bash"))