jQuery - 如何将$(this)作为对象传递?

时间:2010-05-16 02:18:13

标签: jquery jquery-plugins

我正在尝试将一个对象传递给一个函数但是认为$(this)在传递它时实际上没有效果存在问题。

$('textarea[name*=quote]').live('bind',function(){

}).limit('10',$(this).parents('form').children().find('span[name*=qc]') );

第二个参数可以是字符串,也可以是$('span#qc')之类的对象,但我也希望能够传入一个引用当前参数的对象。

为什么呢?因为我在同一页面上有几个表单,每个表单都包含textarea#quote,所以根据选择的表单,我希望能够引用同一表单中的特定元素。

任何??

2 个答案:

答案 0 :(得分:1)

您需要使用.each为每个单独的实例单独调用,如下所示:

$('textarea#quote').each(function() {
    $(this).live('bind',function(){

    }).limit('10',$(this).parents('form').children().find('span#qc') );
});

答案 1 :(得分:1)

要将所有人都绑定到$(this),请使用.each(),如下所示:

$('textarea[name*=quote]').each(function() {
   $(this).limit('10',$(this).closest('form').find('span[name*=qc]'));
});

如果你想要.live() - 就像第二部分那样的功能,你需要使用.livequery(),如下所示:

$('textarea[name*=quote]').livequery(function() {
   $(this).limit('10',$(this).closest('form').find('span[name*=qc]'));
});
或者,或者像第一个例子一样绑定它们,并在加载新元素时绑定它们,例如,如果您使用$.ajax(),它将如下所示:

$.ajax({
  url: blah.html
  success: function(data) {
    //do something with data
    $('textarea[name*=quote]', data).each(function() {
     $(this).limit('10',$(this).closest('form').find('span[name*=qc]'));
   });
  }
});

这里的关键是, datait provides a context to search in,所以这只在返回数据中找到的元素上执行。您还可以将其包装在一个函数中,以防止重复代码,如下所示:

function bindStuff(context) {
  $('textarea[name*=quote]', context || document).each(function() {
    $(this).limit('10',$(this).closest('form').find('span[name*=qc]'));
  });
}

document.ready中,在bindStuff(document)中拨打$.ajax,即可致电bindStuff(data)