根据我的评论,不可能成为this
jQuery 对象。这是因为函数内的值是this
在调用函数时设置的,不能显式设置,它是不可变的。显然,它可能是$(this)
一个 jQuery 对象。
编辑
正如@Anthony Grist 所指出的,这里真正的问题是在.on()
. 如果将其更改为传入字符串选择器,则会相应地this
设置 的值。我为疏忽道歉,这是一个有效的 JSFiddle。
对于它的价值,如果你委托给一个选择器,我会调用.on()
那个选择器:
$("#foo").on("click", function() {});
除此以外...
如果您无法传入字符串选择器并且必须传入一个实际的 jQuery 对象,您可以使用事件对象来解决它。此代码有效:
var jqRow = $('#foo');
$(document).on("click", jqRow, function (e) {
myFunction(e.target);
return false;
});
var jqRow2 = $('#bar');
jqRow2.live("click", function () {
myFunction(this);
return false;
});
function myFunction(x) {
console.log(x);
console.log($(x).attr("id"));
}
工作 JSFiddle
请记住,使用您在那里用于委派的语法不会将事件绑定到jqRow
,而是将其绑定到document
. jQuery 不允许您传递要委托给的 jQuery 对象。所以上面代码的第一部分是毫无意义的,你可以这样做:
var jqRow = $('#foo');
$(document).on("click", function (e) {
if($(e.target).attr("id") === "foo") {
myFunction(e.target);
}
return false;
});
这就是为什么this
您的值.on()
不是单击的对象的原因,正如您所期望的那样,jQuery 无法将事件委托给 jQuery 对象,它需要一个选择器。因此,通过e.target
应该可以解决您的问题。