2011-06-22 9 views
9

Dado el siguiente código, ¿cómo puedo hacer referencia a la entrada que se ha unido automáticamente desde la función success() en la llamada $.ajax? Ni $(this) ni $e funcionan.Hacer referencia a la entrada de texto desde el autocompletado de 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

¿Hay múltiples elementos de la clase 'padre-input'? Si no, ¿por qué no simplemente le das una identificación de 'parent-input' y la referencia usando la función selector? – hughes

+0

Hay varias instancias – bjork24

Respuesta

8

Guardar una referencia a this.element (this.element es un objeto jQuery así que no hay realmente ninguna necesidad de envolverlo en otra llamada 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

Si va a usar 'var element = this;', probablemente tenga que agregar el parámetro 'context: element' a la llamada ajax – hughes

+0

@hughes: En realidad, no creo que usted * tiene * a, pero le permitiría usar '$ (this)' dentro de la función de éxito de la llamada AJAX. –

+0

Oh sí, tienes razón. En ese caso, ¿'elemento' se convierte en una variable global? ¿O la función de éxito está dentro del alcance de la declaración de 'element'? ¿O todo eso ni siquiera importa en JS? – hughes

Cuestiones relacionadas