2011-07-12 10 views
17

Sto cercando di ottenere il completamento automatico di jQueryUI sugli elementi di input del modulo creati dinamicamente, ma non funziona. Ho provato a usare keyup.autocomplete e keydown.autocomplete come bind events in $ .live(), ma è vincolante per i nuovi elementi - solo quelli già presenti nella pagina.Come posso aggiungere jquery ui autocomplete a un elemento creato dinamicamente?

Prova il codice here (prova a digitare "ava" nel primo input, quindi fai clic su "Aggiungi un input" e digita lo stesso nel nuovo input).

JavaScript:

$(function() { 
    $("input#addButton").click(function() { 
     $("input.searchInput:last").clone(true).appendTo($(this).closest("form")); 
     $("input.searchInput:last").val(""); 

    }) 

    $("input.searchInput").live("keydown.autocomplete", function() { 
     $(this).autocomplete({ 
      source: [ 
       "ActionScript", 
       "AppleScript", 
       "Asp", 
       "BASIC", 
       "C", 
       "C++", 
       "Clojure", 
       "COBOL", 
       "ColdFusion", 
       "Erlang", 
       "Fortran", 
       "Groovy", 
       "Haskell", 
       "Java", 
       "JavaScript", 
       "Lisp", 
       "Perl", 
       "PHP", 
       "Python", 
       "Ruby", 
       "Scala", 
       "Scheme" 
       ], 

      minLength: 2 
     }); 
    }) 
}); 

HTML:

<form name="myForm" method="post"> 
    <input id="addButton" name="addButton" type="button" value="Add an input" /> 
    <input name="search" value="" class="searchInput" maxlength="20" /> 
</form> 
+0

Solo per curiosità, avete provato eseguendo il legame ogni volta che un controllo viene creato per l'oggetto specifico creato? Buon punto di partenza per la risoluzione dei problemi ... – Dutchie432

+0

@ Dutchie432: sì, l'ho fatto - http://jsfiddle.net/6t74T/2/ - stesso risultato. –

+1

@Eric: Il tuo violino (jsfiddle.net/6t74T/1) funziona per me in Chrome. Ottengo il completamento automatico anche sulla casella aggiunta. – Mrchief

risposta

31

Funzione .Live() è DEPR ecated ora.

Sembra che il codice come questo funziona:

var options = { 
    source: ["ActionScript", "AppleScript"], 
    minLength: 2 
}; 
var selector = 'input.searchInput'; 
$(document).on('keydown.autocomplete', selector, function() { 
    $(this).autocomplete(options); 
}); 
+0

modifica risposta accettata poiché questo è compatibile con nuove versioni. –

+0

Grazie per questo! Mi ha appena aiutato con un problema con i campi dei moduli nidificati in Rails 3.2 cercando di ottenere il completamento automatico del lavoro! –

+0

Ciao @Andrei, puoi dare un'occhiata a http://stackoverflow.com/questions/33410824/autocomplete-in-jquery-with-dynamically-added-elements too pls. Grazie – Jaikrat

11

Questo funziona:

$(function() { 
 
    var options = { 
 
    source: [ 
 
     "ActionScript", 
 
     "AppleScript", 
 
     "Asp", 
 
     "BASIC", 
 
     "C", 
 
     "C++", 
 
     "Clojure", 
 
     "COBOL", 
 
     "ColdFusion", 
 
     "Erlang", 
 
     "Fortran", 
 
     "Groovy", 
 
     "Haskell", 
 
     "Java", 
 
     "JavaScript", 
 
     "Lisp", 
 
     "Perl", 
 
     "PHP", 
 
     "Python", 
 
     "Ruby", 
 
     "Scala", 
 
     "Scheme" 
 
    ], 
 
    minLength: 2 
 
    }; 
 

 
    $("input.searchInput").live("keydown.autocomplete", function() { 
 
    $(this).autocomplete(options); 
 
    }); 
 

 
    var addInput = function() { 
 
    var inputHTML = " <input name='search' value='' class='searchInput' maxlength='20' />"; 
 
    $(inputHTML).appendTo("form#myForm"); 
 
    $("input.searchInput:last").focus(); 
 
    }; 
 

 
    if (!$("form#myForm").find("input.searchInput").length) { 
 
    addInput(); 
 
    } 
 

 
    $("input#addButton").click(addInput); 
 
});
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
 
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/jquery-ui.min.js"></script> 
 
<form id="myForm" name="myForm" method="post"> 
 
    <input id="addButton" name="addButton" type="button" value="Add an input" /> 
 
</form>

+0

Ciao @Eric, puoi dare un'occhiata a http://stackoverflow.com/questions/33410824/autocomplete-in-jquery-with-dynamically-added-elements too pls. Grazie – Jaikrat

+0

Puoi dare un'occhiata a queste domande hai qualche soluzione: http://stackoverflow.com/questions/38693916/how-to-use-jquery-autocomplete-in-a-dynamic-form –