我想用.live()
替换旧的.on()
函数。
.live()
var jqRow = $('#' + id + ' tr');
jqRow.live("click", function () {
myFunction(this);
return false;
});
。对()
var jqRow = $('#' + id + ' tr');
$(document).on("click", jqRow, function () {
myFunction(this);
return false;
});
this
方法的.live()
返回一个JS对象(我需要这个)。
this
方法的.on()
返回一个jQuery对象,导致myFunction失败。
如何在live函数中获得与此对象相同的非jQuery?
答案 0 :(得分:3)
如果this
确实是 jQuery对象,则可以使用this[0]
或this.get(0)
:
.get()
方法授予我们访问每个jQuery对象下面的DOM节点的权限。
答案 1 :(得分:3)
您的语法不正确,您的jqRow
变量是jQuery对象,但.on()
函数只接受字符串选择器。如果传递jQuery对象,则忽略该参数,这与在文档本身上设置非委托事件处理程序相同。
改变这个:
var jqRow = $('#' + id + ' tr'); // this line creates a jQuery object
$(document).on("click", jqRow, function () {
myFunction(this);
return false;
});
到此:
var jqRow = '#' + id + ' tr'; // this line initialises a string
$(document).on("click", jqRow, function () {
myFunction(this);
return false;
});
答案 2 :(得分:3)
继续发表评论后,this
成为jQuery对象可能 。这是因为函数中this
的值是在调用函数时设置的,并且无法显式设置,它是不可变的。显然, 可能$(this)
成为jQuery对象。
修改强>
正如@Anthony Grist指出的那样,真正的问题是在.on()
中使用jQuery选择器。如果将其更改为传入字符串选择器,则会相应地设置this
的值。我为疏忽道歉,这里是working 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"));
}
请注意,使用您在那里进行委派的语法不将事件绑定到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
可以解决您的问题。
答案 3 :(得分:2)
你可以使用get()函数,它将索引作为参数,或者你可以使用[]。
var jqRow = $('#' + id + ' tr');
$(document).on("click", jqRow, function () {
myFunction(this.get(0));
// or this myFunction(this[0]);
return false;
});
答案 4 :(得分:0)
使用
$(document).ready(function()
{
var id="" ; // ID of your Element
var jqRow = $('#' + id);
jqRow.on("click", 'tr', function ()
{
//alert($(this));
myFunction($(this));
return false;
});
});