Meg*_*att 3 javascript jquery function callback
这是我不久前问过的另一个问题的后续问题.通常,您可以从jQuery事件访问函数调用中的事件,如下所示:
$item.live("click", functionToCall);
Run Code Online (Sandbox Code Playgroud)
并在功能:
function functionToCall(ev) {
// do something with ev here, like check 'ev.target'
}
Run Code Online (Sandbox Code Playgroud)
但是如果我想将一个参数发送到functionToCall()并访问该事件呢?也许这样的事情呢?:
$item.live("click", functionToCall($(this)); // send over parameter this time
Run Code Online (Sandbox Code Playgroud)
和
function functionToCall(ev, $clickedItem) {
// both accessible here?
alert(ev.type);
alert($clickedItem.attr('id'));
}
Run Code Online (Sandbox Code Playgroud)
这是可以接受的,还是有不同的方式发送参数?因为这种方式对我来说似乎不对.任何帮助,将不胜感激.谢谢.
澄清:我意识到一个匿名的回调函数可以让我访问这两个,但由于各种原因太长而无法进入这篇文章,我需要使用函数调用而不是匿名函数.所以我的问题严格处理需要调用外部函数的场景.谢谢.
更新:我的原始问题提出了需要将$(this)作为参数传递给外部函数的场景.事实证明,$(this)将在函数中可访问,甚至不需要传递它,因为jQuery基于事件将值重新分配给"this".所以执行此代码应该适用于我原来的问题:
$item.live("click", functionToCall);
Run Code Online (Sandbox Code Playgroud)
和
function functionToCall(ev) {
alert(ev.type);
alert($(this).attr('id')); // display id of item that was clicked
}
Run Code Online (Sandbox Code Playgroud)
但是,正如其他人已经回答的那样,有一种不同的场景需要将不同类型的变量作为参数传递,例如简单的字符串或int.在这种情况下,正如其他人所说,它变得更加复杂.但这里似乎有足够的答案来满足第二种情况(即"currying").谢谢.
您可以咖喱或部分应用您的功能:
像这样的东西:
function functionToCall($clickedItem) {
return function (ev) {
// both accessible here
alert(ev.type);
alert($clickedItem.attr('id'));
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像你想要的那样使用它:
$item.live("click", functionToCall($(this));
Run Code Online (Sandbox Code Playgroud)
注意:如果您无法修改原件,functionToCall因为它是"外部",您可以将其包装:
function wrapFunctionToCall($clickedItem) {
return function (ev) {
// call original function:
functionToCall(ev, $clickedItem);
}
}
// ...
$item.live("click", wrapFunctionToCall($(this));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3879 次 |
| 最近记录: |