2013-07-09 17 views
13

Vorrei impostare un semplice evento onClick jQuery per rendere dinamica l'interfaccia utente su un modello di manubri. Mi stavo chiedendo di aggiungereClass() dopo un clic specifico.gestione evento jQuery onClick su manubri

considerano il codice HTML (generato dal manubrio)

{{#if hasButton}} 
     <div id="container">  
      <button type="submit" class="myButton">Click me!</button> 
     </div> 
    {{/if}} 

cioè: Dopo un clic all'interno di un pulsante, il suo contenitore riceverà una classe di carico che creerà l'interazione con i CSS.

Questo codice dovrebbe andare sul mio modello di manubrio o dovrei riscriverlo in un helper specifico per esso? C'è qualche esempio che potrebbe essere fornito così posso studiarlo e poi sviluppare qualcosa di simile?

Grazie in anticipo!

+0

Si dovrebbe mantenere 'html',' css' e 'js' separati. Se crei qualcosa da un modello, dovresti sapere quali azioni dovrebbero aver luogo nel modello. (o perché invii queste informazioni con il modello dal server) o perché già conosci il tuo codice. Quindi, registrati i 'callbacks' per il tuo evento dopo che hai aggiunto il modello o useresti [delegato] (http://api.jquery.com/on/#direct-and-delegated-events) per gli eventi (qualcosa del tipo: '$ (containerWhereYouAddThetemplateTo) .on (" click "," .myButton ", function() {})'; –

risposta

13

È necessario aggiornare i listener di Jquery DOPO l'inserimento di nodi nel codice HTML del DOM.

var source = "<li><a href="{{uri}}">{{label}}</a></li>"; 
var template = Handlebars.compile(source); 
var context = {"uri":"http://example.com", "label":"my label"}; 
$("ul").append(template(context)); 

// add your JQuery event listeners 
$("li").click(function(){ alert("success"); }); 
0

Non sono sicuro di quale sia esattamente il tuo problema. È corretto in questo modo se si mantiene il codice JavaScript in un file * .js, perhaps utilizzando parent() invece su prev() in questo caso specifico.

+0

Il problema è che l'evento non viene attivato perché aggiungendo che jQuery semplicemente non funziona (questo codice in realtà va sul modello di manubri non un js esterno. (btw ho cambiato da prev() a parent() per una migliore leggibilità del codice) – Hal

38

non v'è alcuna necessità di ricollegare il gestore di eventi su ogni aggiornamento DOM dinamica se li sta definendo a livello di documento:

$(document).on('click','li',function(){ 
    alert('success'); 
}); 

Spero che questo aiuti! :-)

+0

questo è come è fatto in una moderna app web! – ProblemsOfSumit

+2

Word. Fai questo modo. Ma mi piace restringi il più possibile sostituendo 'document' per il nodo di rendering più vicino, come il div in cui hai reso il modello del manubrio. –