2011-06-22 42 views
9

Với mã sau, làm cách nào tôi có thể tham chiếu đầu vào có tự động hoàn thành được liên kết với nó từ trong hàm success() trong cuộc gọi $.ajax? Không phải công việc $(this) hoặc $e.Tham chiếu nhập văn bản từ bên trong jQuery autocomplete

$('.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

Có nhiều yếu tố của lớp 'mẹ-input'? Nếu không, tại sao không chỉ cung cấp cho nó một id của 'cha mẹ-đầu vào' thay vào đó, và tham khảo nó bằng cách sử dụng chức năng chọn? – hughes

+0

Có nhiều trường hợp – bjork24

Trả lời

8

Lưu một tài liệu tham khảo để this.element (this.element là một đối tượng jQuery vì vậy thực sự không cần phải bọc nó trong một cuộc gọi 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

Nếu bạn định sử dụng 'var element = this;', bạn có thể sẽ phải thêm tham số 'context: element' vào cuộc gọi ajax – hughes

+0

@hughes: Thực ra tôi không nghĩ rằng bạn * có *, nhưng nó sẽ cho phép bạn sử dụng '$ (this)' bên trong hàm thành công của cuộc gọi AJAX. –

+0

Oh yeah, bạn nói đúng. Trong trường hợp đó, 'element' có trở thành biến toàn cầu không? Hoặc là hàm thành công trong phạm vi của khai báo 'phần tử'? Hay tất cả những điều đó thậm chí không quan trọng trong JS? – hughes

Các vấn đề liên quan