7

通常,当需要访问事件时,您可以通过回调函数中指定的参数来实现:

$button.live("click", function(ev) {
  // do something with ev here, like check 'ev.target'
}

但是相反(由于过于复杂的原因无法进入这里),我不想使用匿名回调函数,而是指定一个要调用的函数,如下所示:

$button.live("click", functionToCall(ev, $(this));

所以你会注意到我在functionToCall() 中包含了'ev' 作为参数,但这显然行不通,因为我没有使用匿名回调函数。但我仍然需要在 functionToCall() 中访问该单击事件(以检查 ev.target)。我的问题是,我如何访问此活动?如果我能做这样的事情会很好:

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

function functionToCall($item) {

   var target = $item.event("click").target;
   // do something with target
}

任何想法将不胜感激。谢谢。

4

4 回答 4

14

原始答案

function test(eve) {
  alert(eve.type);
  alert(this);
  //$(this) if you need it as jQuery object
}
$([yourselector]).live("click", test);

您将自动获取eve参数中的事件。


在评论中回答扩展问题

传入参数会使它变得更加困难。如果你需要解释我为什么这样做:问。

function helper(customparam) {
    return function(eve, selector) { actualFunction(eve, selector, customparam, this) };
}

function actualFunction(eve, selector, customparam, self) {
    alert(eve.type);
    alert(selector);
    alert(customparam);
    alert(self); //self is now the element we clicked on
    //$(self) if you need it as jQuery object
    //using this won't work anymore as this is now window
}

$([yourselector]).live("click", helper([yourparameter]));
于 2009-11-25T17:38:51.707 回答
2

您可以在匿名回调函数中调用一个函数:

$button.live("click", function(ev) {
    functionToCall(ev, $(this));
}

编辑:我认为这可能是您想要做的(未经测试):

function handleClick(ev) {
    $(this).die("click");
    // ...whatever processing to do...
    $(this).live("click", handleClick);
}

$button.live("click", handleClick);

我相信$(this)将引用调用该函数的按钮对象。

于 2009-11-25T17:38:30.743 回答
1

this请记住,jQuery在调用事件处理程序时会使用 Function 方法callapply重新分配。所以调用functionToCallthis时,是$button的DOM元素。

var functionToCall(ev) {
    var $this = $(this);
    $this.die("click", functionToCall);
    // stuff
    $this.live("click", functionToCall);
}

$button.live("click", functionToCall);
于 2009-11-25T18:10:01.083 回答
0
var mythis = $(this);
var callback = function(ev) {
    var target = mythis.event("click").target;
}


$button.live("click", callback);
于 2009-11-25T17:38:52.020 回答