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