我正在尝试将一个对象传递给一个函数但是认为$(this)在传递它时实际上没有效果存在问题。
$('textarea[name*=quote]').live('bind',function(){
}).limit('10',$(this).parents('form').children().find('span[name*=qc]') );
第二个参数可以是字符串,也可以是$('span#qc')之类的对象,但我也希望能够传入一个引用当前参数的对象。
为什么呢?因为我在同一页面上有几个表单,每个表单都包含textarea#quote,所以根据选择的表单,我希望能够引用同一表单中的特定元素。
任何??
答案 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]'));
});
}
});
这里的关键是, data
,it 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)
。