2011-06-22 6 views
9

Étant donné le code suivant, comment puis-je référencer l'entrée dont la saisie semi-automatique est liée à partir de la fonction success() dans l'appel $.ajax? Ni $(this) ni $e ne fonctionnent.Référencement de la saisie de texte à partir de la saisie semi-automatique 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

Y at-il des éléments multiples de la classe 'parent-input'? Si non, pourquoi ne pas simplement lui donner un identifiant de 'parent-input' à la place, et le référencer en utilisant la fonction de sélection? – hughes

+0

Il y a plusieurs instances – bjork24

Répondre

8

Enregistrer une référence à this.element (this.element est un objet jQuery donc il n'y a vraiment pas besoin de l'envelopper dans un autre appel 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 vous allez utiliser 'var element = this;', vous devrez probablement ajouter le paramètre 'context: element' à l'appel ajax – hughes

+0

@hughes: En fait, je ne vous pense pas * have * to, mais cela vous permettrait d'utiliser '$ (this)' dans la fonction de succès de l'appel AJAX. –

+0

Oh oui, vous avez raison. Dans ce cas, 'element' devient-il une variable globale? Ou est la fonction de succès dans le cadre de la déclaration de 'element'? Ou est-ce que tout cela n'a même pas d'importance dans JS? – hughes

Questions connexes