Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从jQuery事件访问函数中的参数*和*事件_Javascript_Jquery_Function_Callback - Fatal编程技术网

Javascript 从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')); } } 在函数中

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

$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) ); });