2016-05-28 13 views
0

Ich weiß nicht, warum, aber wenn ich auf auf „Button“ nichts passiert ...addEventListener Modul Muster

Keine Meldung in der Konsole, keinen Fehler. Wie man es repariert ?

JS

var bird = (function(){ 

    let button = document.querySelector('#addBird'); 

    button.addEventListener('click', addBird); 

    function addBird() 
    { 
     console.log('addBird'); 
    }; 

    return { 
     addBird: addBird 
    }; 
})(); 

HTML

<button id="addBird">Add Bird</button> 
+0

Wenn Sie das JS * nach * ausführen, ist der Button vorhanden und dann [funktioniert es] (https://jsfiddle.net/af95Lnrw/). Obwohl es keinen Sinn ergibt - warum binden Sie "addBird" sofort als Event-Handler ein, sondern geben es als Methode Ihres Objekts zurück? – nnnnnn

+0

Ich habe gerade Ihren Code in die Geige eingefügt und es scheint für mich zu funktionieren. https://jsfiddle.net/o1mf1gxw/ –

+0

@nnnnnn Weil ich versucht habe mit der Konsole (über die Konsole funktioniert es). Und tatsächlich funktioniert es gut so. Ich habe dir nicht meinen ganzen Code gegeben. Und das Problem liegt an der Funktion _render(), die Moustache.render (...) zurückgibt. Bitte schauen Sie nach: https://jsfiddle.net/458szLun/1/ – Swarovski

Antwort

0

versuchte gerade dieses Beispiel in CodePen:

http://codepen.io/JasonGraham/pen/pbowXz

var bird = (function(){ 

    let button = document.querySelector('#addBird'); 
    button.addEventListener('click', addBird); 

    function addBird() 
    { 
     console.log('addBird'); 
    }; 

    return { 
     addBird: addBird 
    }; 

})(); 

Soweit ich sehen kann, Ihren Code appe Ars, um wie erwartet zu arbeiten. Wenn Sie in Chrome auf die Schaltfläche klicken, wird die Meldung "addBird" jedes Mal in der Konsole protokolliert.

Erwarten Sie etwas anderes?

+2

Also deine "Antwort" zu "Warum funktioniert das nicht?" ist "Es funktioniert"? Das ist eher ein Kommentar (und erfordert auf keinen Fall eine Wiederholung aller JS des OP). – nnnnnn

+0

@nnnnnn, ja Es funktioniert. Für mich auch. –

+1

Wenn es nicht kaputt ist, versuche es nicht zu reparieren :). –

0

Dies passiert, weil das JavaScript geladen wird, bevor das DOM (im Grunde das HTML-Markup) bereit ist. Daher entspricht die button Variable NULL.

Zwei Möglichkeiten, dieses Problem zu lösen:

  • am Ende der Seite Bewegen Sie JavaScript, um kurz vor dem </body>-Tag.
  • Wickeln Sie Ihren JavaScript-Code mit Dokument jQuery-Ready-Funktion:
    $(function() { // code here });
+0

Nein, er hat keine Fehler in der Konsole. Versuchen Sie, sein Skript vor dom zu laden, und Sie erhalten "kann nicht lesen Eigenschaft addEventListener von null" –

+0

Eigentlich ist alles in Ordnung. Mein Problem ist wegen Moustache.render: https://jsfiddle.net/458szLun/1/ – Swarovski

+0

Wenn ich und außerhalb der # birdMod einfügen Es funktioniert ... So war es nicht die .render() -Funktion. Danke für Ihre Hilfe. – Swarovski

0

Ok, wenn ich einfügen und außerhalb des #birdMod Es funktioniert ... So war es nicht der .render() Funktion. Danke für Ihre Hilfe. :)