2011-06-22 25 views
9

给定以下代码,如何在$.ajax调用中的success()函数内引用自动完成绑定的输入? $(this)$e都不起作用。引用jQuery自动完成中的文本输入

$('.parent-input').autocomplete({ 
    source: function(request, response) { 
    $.ajax({ 
     url: "/chunky/bacon", 
     dataType: 'json', 
     data: { 
     product_id: $('#product-id').val(), 
     term: request.term 
     }, 
     success: function(data){ 
     var resultCount = data.length; 
     // I NEED TO REFERENCE .parent-input HERE 
     response(data); 
     } 
    }); 
    }, 
    minLength: 2, 
    select: function(event, ui){ 
    addAssociatedProduct(ui.item.id, ui.item.value); 
    $(this).val(''); 
    return false; 
    } 
}); 
+0

是否有类的多个元素'家长input'?如果没有,为什么不直接给它一个'parent-input'的id,并使用选择器函数来引用它呢? – hughes

+0

有多个实例 – bjork24

回答

8

保存到this.element参考(this.element是一个jQuery对象,所以实际上没有必要把它包起来的另一个jQuery的调用):

$('.parent-input').autocomplete({ 
    source: function(request, response) { 
    var element = this.element; // <-- this.element is the input the widget is bound to. 
    $.ajax({ 
     url: "/chunky/bacon", 
     dataType: 'json', 
     data: { 
     product_id: $('#product-id').val(), 
     term: request.term 
     }, 
     success: function(data){ 
     var resultCount = data.length; 
     // element still refers to the input the widget is bound on. 
     // for example: 

     element.addClass("blue"); 

     response(data); 
     } 
    }); 
    }, 
    minLength: 2, 
    select: function(event, ui){ 
    addAssociatedProduct(ui.item.id, ui.item.value); 
    $(this).val(''); 
    return false; 
    } 
}); 
+0

如果您打算使用'var element = this;',您可能必须将'context:element'参数添加到ajax调用 – hughes

+0

@hughes:其实我不认为你*有*,但它可以让你在AJAX调用的成功函数中使用'$(this)'。 –

+0

哦,是的,你说得对。在那种情况下,'element'成为一个全局变量吗?或者'element'声明范围内的成功函数?或者所有这些在JS中都不重要? – hughes