Ich versuche, eine HTML-Schaltfläche zum Aufrufen einer JavaScript-Funktion zu verwenden.
Hier ist der Code:
<input type="button" value="Capacity Chart" onclick="CapacityChart();">
Es scheint jedoch nicht richtig zu funktionieren. Gibt es einen besseren Weg, dies zu tun?
Hier ist der Link: http://projectpath.ideapeoplesite.com/bendel/toolscalculators.html Klicken Sie auf die Registerkarte Kapazität im unteren linken Bereich. Die Schaltfläche sollte eine Warnung generieren, wenn die Werte nicht geändert werden, und ein Diagramm erstellen, wenn Sie Werte eingeben.
javascript
html
Wald
quelle
quelle
Antworten:
Es gibt verschiedene Möglichkeiten, Ereignisse mit HTML / DOM zu behandeln. Es gibt keinen richtigen oder falschen Weg, aber verschiedene Wege sind in verschiedenen Situationen nützlich.
1: Es wird im HTML definiert:
2: Es wird der DOM-Eigenschaft für das Ereignis in Javascript hinzugefügt:
3: Und es gibt eine Funktion, die mit Javascript eine Funktion an den Ereignishandler anfügt:
Sowohl die zweite als auch die dritte Methode ermöglichen Inline- / anonyme Funktionen und beide müssen deklariert werden, nachdem das Element aus dem Dokument analysiert wurde. Die erste Methode ist kein gültiges XHTML, da das onclick-Attribut nicht in der XHTML-Spezifikation enthalten ist.
Die 1. und 2. Methode schließen sich gegenseitig aus, dh die Verwendung der einen (2.) Methode überschreibt die andere (1.). Mit der 3. Methode können Sie beliebig viele Funktionen an denselben Ereignishandler anhängen, auch wenn auch die 1. oder 2. Methode verwendet wurde.
Das Problem liegt höchstwahrscheinlich irgendwo in Ihrer
CapacityChart()
Funktion. Nachdem Sie Ihren Link besucht und Ihr Skript ausgeführt haben, wird die Funktion CapacityChart () ausgeführt und die beiden Popups werden geöffnet (eines wird gemäß dem Skript geschlossen). Wo Sie die folgende Zeile haben:Versuchen Sie stattdessen Folgendes:
BEARBEITEN
Als ich Ihren Code sah, dachte ich, Sie schreiben ihn speziell für den IE. Wie andere bereits erwähnt haben, müssen Sie Verweise auf
document.all
durch ersetzendocument.getElementById
. Sie haben jedoch weiterhin die Aufgabe, das Skript danach zu reparieren. Ich würde daher empfehlen, es zuerst mindestens im IE zum Laufen zu bringen, da Fehler, die Sie beim Ändern des Codes machen, um browserübergreifend zu funktionieren, noch mehr Verwirrung stiften können. Sobald es im IE funktioniert, ist es einfacher zu erkennen, ob es in anderen Browsern funktioniert, während Sie den Code aktualisieren.quelle
$("#clickMe").bind('click', function () { alert('hello!'); };)
Ich würde sagen, es wäre besser, das Javascript unauffällig hinzuzufügen ...
Wenn Sie jQuery verwenden, können Sie Folgendes tun:
quelle
Ihr HTML-Code und die Art und Weise, wie Sie die Funktion über die Schaltfläche aufrufen, sehen korrekt aus.
Das Problem scheint in der
CapacityCount
Funktion zu liegen. Ich erhalte diesen Fehler in meiner Konsole unter Firefox 3.5: "document.all is undefined" in Zeile 759 von bendelcorp.js.Bearbeiten:
Sieht so aus, als wäre
document.all
es nur ein IE und eine nicht standardmäßige Möglichkeit, auf das DOM zuzugreifen. Wenn Sie verwendendocument.getElementById()
, sollte es wahrscheinlich funktionieren. Beispiel:document.getElementById("RUnits").value
stattdocument.all.Capacity.RUnits.value
quelle
Das sieht richtig aus. Ich denke, Sie haben Ihre Funktion entweder mit einem anderen Namen oder in einem Kontext definiert, der für die Schaltfläche nicht sichtbar ist. Bitte fügen Sie einen Code hinzu
quelle
Damit Sie wissen, sollte das Semikolon ( ; ) nicht in der Schaltfläche vorhanden sein, wenn Sie die Funktion aufrufen.
Also sollte es einfach so aussehen:
onclick="CapacityChart()"
dann sollte alles klappen :)
quelle
Ein großes Problem ist, dass Sie Browser-Sniffing ohne guten Grund verwenden:
Ich bin auf Chrome,
navigator.appName
werde es also nicht seinNetscape
. Unterstützt Chromedocument.all
? Vielleicht, aber vielleicht auch nicht. Und was ist mit anderen Browsern?Die Version des Codes in der
Netscape
Verzweigung sollte in jedem Browser bis zu Netscape Navigator 2 von 1996 funktionieren, also sollten Sie sich wahrscheinlich einfach daran halten ... außer dass es nicht funktioniert (oder nicht garantiert funktioniert) ), weil Siename
für dieinput
Elemente kein Attribut angegeben haben , sodass sie nichtelements
als benannte Elemente zum Array des Formulars hinzugefügt werden:Geben Sie ihnen entweder einen Namen und verwenden Sie das
elements
Array oder (besser) verwendenDies funktioniert auf allen modernen Browsern - keine Verzweigung erforderlich. Um auf der sicheren Seite zu sein, ersetzen Sie dieses Schnüffeln für eine Browserversion größer oder gleich 4 durch eine Überprüfung auf
getElementById
Unterstützung:Sie möchten wahrscheinlich auch Ihre Eingabe validieren. etwas wie
würde helfen.
quelle
document.getElementById
, die anderen Sachen zu verwenden und zu entfernen.Ihr Code schlägt in dieser Zeile fehl:
Ich habe versucht, es mit Firebug zu durchlaufen, und es schlägt dort fehl. Das sollte Ihnen helfen, das Problem herauszufinden.
Sie haben jquery referenziert. Sie können es auch in all diesen Funktionen verwenden. Dadurch wird Ihr Code erheblich bereinigt.
quelle
Ich habe einen intelligenten Funktionsrückruf-Tastencode:
quelle
EINFACHE ANTWORT:
Wobei ID die ID des Eingabefeldes ist.
quelle
alberner Weg:
Sie sollten sich mit diskretem Javascript befassen und eine Frameworks-Bindungsmethode verwenden, um Rückrufe an dom-Ereignisse zu binden.
quelle
javascript:
Protokoll wird in diesemonclick
Fall nicht benötigt . Das Ereignis onclick ist bereits Javascript. Dasjavascript:
Protokoll dient zur Ausführung von Javascript im href-Attribut eines Links.