2016-11-11 4 views
0

So ist der Teil meiner Code, der ein Problem hat, ist wie folgtModals und Formulare

var manuSu = document.getElementById("Man"); 
 

 
manuSu.onclick = function(){ 
 
    for(i=0; i<8;i++){ 
 
    periodEnd[i] = document.getElementById("pE").elements.item(i).value; 
 
    } 
 
    modal.style.display = "none"; 
 
}

"Man" ist eine Taste und "PE" ist eine Form. Ich habe den Code in Chrom ausgeführt und erhalte den Fehler

Uncaught Typeerror: Kann nicht gesetzt Eigenschaft ‚Onclick‘ von null (...)

Ich habe etwa 30 Minuten googeln getan und es hat offenbar etwas mit dem zu tun, modal. Sowohl die Form und Knopf im Modal enthalten

Edit: Sofern Sie vorher haben erklärt die i Variable von Ihrem for Schleife in einem enthaltenden Bereich, erkennen, dass Sie eine globale Variable würde erklären (eine schlechte Praxis).

+0

Bitte zeigen Sie den HTML-Code, wo Sie die Schaltfläche "Man" definieren. – gus27

+0

manuSu ist '' null'', was bedeutet, dass '' document.getElementById'' nichts gefunden hat, wenn man nach dem '' id'' gesucht hat und '' return'' null hatte. – Crowes

Antwort

0

Das Problem ist Ihre <div id="Man"></div> nicht in diesem Moment existieren, dann wird dieser Code ausgeführt. Führen Sie es einfach aus, nachdem Sie Ihr Modal angezeigt haben, dann <div id="Man"></div> in DOM sein.

Auch Sie können jQuery-Framework verwenden, dort können Sie Ereignis-Listener auf Objekt anhängen, die in diesem Moment nicht existieren, aber später erscheinen können.

+0

Können Sie mir ein Beispiel für den Ereignis-Listener oder eine Ressource, um es zu lernen. Ich weiß nicht viel über jQuery. –

0

Es ist schwierig, den Fehler nur anhand dessen, was Sie angegeben haben, zu diagnostizieren. Basierend auf dem geworfenen Fehler von Chrome hat ein mögliches Problem, das ich mir vorstellen kann, mit dem Laden von <script> zu tun. Wenn Sie beispielsweise Ihren Code nicht in einen window.onload Ereignis-Listener (oder dessen jQuery-Äquivalent, $(document).ready()) umgebrochen haben, sind Sie anfällig für Probleme, z. B. was Ihnen begegnet. Das Problem rührt von der Tatsache her, dass das DOM noch nicht vollständig geparst/gerendert wurde, bevor Ihre Funktion ausgeführt wird. Wenn es nach etwas mit einem id-Attribut von #Man sucht, gibt es daher null zurück, da noch kein solches Element an das DOM angehängt wurde. Die Ereignisbehandlungsroutinen onload (oder ready) vermeiden dieses Problem, indem Sie die Ausführung Ihres Skripts verzögern, bis das DOM vollständig gerendert wurde. Zu diesem Zweck könnte es auch hilfreich sein, Ihr <script>-Tag, das Ihre Funktion enthält, so zu verschieben, dass es das letzte Element vor dem schließenden Tag des Elements <body> ist (</body>). Da die HTML-Seite linear gelesen wird (dh, von links nach rechts, von oben nach unten), bedeutet das Delegieren eines <script> an dieser Position in der HTML-Seite, dass es nicht getroffen wird, bis die Gesamtheit document.body gerendert wurde angezeigt.