Javascript 从jQuery事件访问函数中的参数*和*事件
这是我不久前提出的另一个问题的后续问题。通常,您可以从jQuery事件访问函数调用中的事件,如下所示:Javascript 从jQuery事件访问函数中的参数*和*事件,javascript,jquery,function,callback,Javascript,Jquery,Function,Callback,这是我不久前提出的另一个问题的后续问题。通常,您可以从jQuery事件访问函数调用中的事件,如下所示: $item.live("click", functionToCall); function functionToCall($clickedItem) { return function (ev) { // both accessible here alert(ev.type); alert($clickedItem.attr('id')); } } 在函数中
$item.live("click", functionToCall);
function functionToCall($clickedItem) {
return function (ev) {
// both accessible here
alert(ev.type);
alert($clickedItem.attr('id'));
}
}
在函数中:
function functionToCall(ev) {
// do something with ev here, like check 'ev.target'
}
但是如果我想向functionToCall()发送一个参数并访问该事件呢?那么像这样的事情,也许
$item.live("click", functionToCall($(this)); // send over parameter this time
及
这是可以接受的,还是有其他方式发送参数?因为我觉得这样不合适。任何帮助都将不胜感激。谢谢
澄清:我意识到匿名回调函数允许我同时访问这两个函数,但由于各种原因,在本文中我需要使用函数调用,而不是匿名函数。因此,我的问题严格涉及需要调用外部函数的场景。谢谢
更新:我最初的问题提出了需要将$(this)作为参数传递给外部函数的场景。事实证明,$(this)在函数中是可以访问的,甚至不需要传递它,因为jQuery根据事件将值重新分配给“this”。因此,执行此代码应该适用于我的原始问题:
$item.live("click", functionToCall);
及
然而,正如其他人所回答的,有一种不同的情况需要将不同类型的变量作为参数传递,例如简单的字符串或int。在这种情况下,由于其他人有注释,它变得更加复杂。但这里似乎有足够的答案来满足第二种情况(即“咖喱”)。谢谢。您可以或部分应用您的功能:
function functionToCall(ev) {
// do something with ev here, like check 'ev.target'
}
大概是这样的:
$item.live("click", functionToCall);
function functionToCall($clickedItem) {
return function (ev) {
// both accessible here
alert(ev.type);
alert($clickedItem.attr('id'));
}
}
然后您可以随心所欲地使用它:
$item.live("click", functionToCall($(this));
注意:如果您无法将原始的函数修改为调用
,因为它是“外部的”,您可以将其包装为:
function wrapFunctionToCall($clickedItem) {
return function (ev) {
// call original function:
functionToCall(ev, $clickedItem);
}
}
// ...
$item.live("click", wrapFunctionToCall($(this));
我知道问题已经得到了回答,但值得一提的是,如果您不想编辑原始函数,这里有一行代码也可以:
@丹尼尔,谢谢你的回复。但是,我应该更清楚,我需要使用外部函数调用,而不是匿名函数声明。我编辑了我的问题以反映澄清。谢谢。你能更具体地说明你想要传递的数据是什么吗?也许有办法得到它,但可能并不容易。jQuery绑定函数能够传递额外的数据,但是live函数似乎不能这样做。你需要live功能,还是bind就足够了?不幸的是,我确实需要live功能。自从提出这个问题以来,我现在知道,如果我想在函数中访问$(this),我只需要引用$(this)b/c jQuery就可以根据调用的内容重新分配“this”。因此,在不带参数的情况下调用functionToCall(),然后将其声明为functionToCall(ev)将允许我访问事件(通过“ev”),并允许我引用函数中仅通过引用$(this)单击的项。然而,我很想知道(我想其他人也一样)如何传递除$(这个)之外的其他东西,比如字符串
$item.live("click", function() { functionToCall( $(this) ); });