2011-06-22 7 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への参照(別のjQueryの呼び出しでそれをラップする必要は実際にはありませんので、this.elementは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:実際はあなたとは思わない* have * toを持つことはできますが、AJAX呼び出しのsuccess関数の中で '$(this) 'を使用できるようになります。 –

+0

ああ、そうだよ。その場合、 'element'はグローバル変数になりますか?あるいは、 'element'宣言の範囲内で成功関数ですか?それともJSでさえ問題ないの? – hughes