-1

我想.live().on().

。居住()

 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 这个对象?

4

5 回答 5

3

如果真的this是一个 jQuery 对象,你可以使用or :this[0]this.get(0)

.get()方法允许我们访问每个 jQuery 对象下的 DOM 节点。

于 2012-08-20T09:01:51.117 回答
3

您的语法不正确,您的jqRow变量是一个 jQuery 对象,但该.on()函数只接受string selectors。如果您传递一个 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;
});
于 2012-08-20T09:13:43.447 回答
3

根据我的评论,不可能成为thisjQuery 对象。这是因为函数内的值是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应该可以解决您的问题。

于 2012-08-20T09:14:13.930 回答
2

你可以使用get()函数,它以索引为参数,也可以使用[]。

var jqRow = $('#' + id + ' tr');
$(document).on("click", jqRow, function () {
                    myFunction(this.get(0));
                    // or this myFunction(this[0]);
                    return false;
        });
于 2012-08-20T09:02:38.857 回答
0

采用

$(document).ready(function()
{ 
    var id="" ;  // ID of your Element
     var jqRow = $('#' + id);
      jqRow.on("click", 'tr', function ()
      {
                //alert($(this));
                myFunction($(this));
                return false;
       });


 });​

​</p>

于 2012-08-20T09:10:03.110 回答