从 jQuery 事件访问函数中的参数*和*事件

2024-05-11

这是我不久前问的另一个问题的后续问题。通常,您可以从 jQuery 事件的函数调用中访问事件,如下所示:

$item.live("click", functionToCall);

并在函数中:

function functionToCall(ev) {
  // do something with ev here, like check 'ev.target'
}

但是如果我想向 functionToCall() 发送一个参数怎么办and访问活动?也许是这样的? :

$item.live("click", functionToCall($(this));  // send over parameter this time

and

function functionToCall(ev, $clickedItem) {
  // both accessible here?
  alert(ev.type);
  alert($clickedItem.attr('id'));
}

这是可以接受的,还是有其他方法来发送参数?因为这种方式在我看来不太合适。任何帮助,将不胜感激。谢谢。

澄清:我意识到匿名回调函数将允许我访问两者,但由于各种原因太长而无法在本文中讨论,我需要使用函数调用而不是匿名函数。所以我的问题严格涉及需要调用外部函数的情况。谢谢。

UPDATE:我最初的问题提出了需要将 $(this) 作为参数传递给外部函数的场景。事实证明,由于 jQuery 根据事件将值重新分配给“this”的方式,$(this) 在函数中甚至不需要传递它就可以访问。因此,执行此代码应该适用于我原来的问题:

$item.live("click", functionToCall);

and

function functionToCall(ev) {
  alert(ev.type);
  alert($(this).attr('id'));  // display id of item that was clicked
}

然而,正如其他人所回答的那样,存在一种不同的情况,涉及需要传递不同类型的变量作为参数,例如简单的字符串或整数。在这种情况下,正如其他人有注释一样,它变得更加复杂。但这里似乎确实有足够的答案来满足第二种情况(即“柯里化”)。谢谢。


You can curry http://en.wikipedia.org/wiki/Currying或部分应用您的功能:

像这样的东西:

function functionToCall($clickedItem) {
  return function (ev) {
    // both accessible here
    alert(ev.type);
    alert($clickedItem.attr('id'));
  }
}

然后你就可以按照你想要的方式使用它:

$item.live("click", functionToCall($(this)); 

Note:如果你无法修改原来的functionToCall因为是“外部”,你可以将它包装起来:

function wrapFunctionToCall($clickedItem) {
  return function (ev) {
    // call original function:
    functionToCall(ev, $clickedItem);
  }
}
// ...
$item.live("click", wrapFunctionToCall($(this));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 jQuery 事件访问函数中的参数*和*事件 的相关文章

随机推荐