通常,当需要访问事件时,您可以通过回调函数中指定的参数来执行此操作:
$button.live("click", function(ev) {
// do something with ev here, like check 'ev.target'
}
但是(由于原因太复杂而无法进入此处),我不想使用匿名回调函数,而是指定要调用的函数,如下所示:
$button.live("click", functionToCall(ev, $(this));
所以你会注意到我把'ev'作为functionToCall()的参数包含在内,但是这显然不起作用,因为我没有使用匿名回调函数。但我仍然需要访问functionToCall()中的click事件(以检查ev.target)。我的问题是,如何访问此活动?如果我可以做这样的事情会很好:
$button.live("click", functionToCall($(this));
和
function functionToCall($item) {
var target = $item.event("click").target;
// do something with target
}
非常感谢任何想法。感谢。
答案 0 :(得分: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]));
答案 1 :(得分: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)将引用调用该函数的按钮对象。
答案 2 :(得分:1)
请记住,jQuery在调用事件处理程序时会重新分配this
,方法是使用函数方法调用或应用。因此,当调用 functionToCall 时,this
是$ button的DOM元素。
var functionToCall(ev) {
var $this = $(this);
$this.die("click", functionToCall);
// stuff
$this.live("click", functionToCall);
}
$button.live("click", functionToCall);
答案 3 :(得分:0)
var mythis = $(this);
var callback = function(ev) {
var target = mythis.event("click").target;
}
$button.live("click", callback);