Ich suche eine allgemeine Lösung dafür.
Betrachten Sie 2 gleichnamige Funkeingänge. Bei der Übermittlung bestimmt der geprüfte Wert den Wert, der mit dem Formular gesendet wird:
<input type="radio" name="myRadios" onchange="handleChange1();" value="1" />
<input type="radio" name="myRadios" onchange="handleChange2();" value="2" />
Das Änderungsereignis wird nicht ausgelöst, wenn ein Optionsfeld deaktiviert ist. Wenn also das Radio mit dem Wert = "1" bereits ausgewählt ist und der Benutzer das zweite auswählt, wird handleChange1 () nicht ausgeführt. Dies stellt (für mich jedenfalls) ein Problem dar, da es kein Ereignis gibt, bei dem ich diese Abwahl abfangen kann.
Was ich möchte, ist eine Problemumgehung für das Ereignis onchange für den Wert der Kontrollkästchengruppe oder alternativ ein Ereignis oncheck, das nicht nur erkennt, wenn ein Radio aktiviert ist, sondern auch, wenn es deaktiviert ist.
Ich bin sicher, einige von Ihnen sind schon einmal auf dieses Problem gestoßen. Was sind einige Problemumgehungen (oder idealerweise der richtige Weg, um damit umzugehen)? Ich möchte nur das Änderungsereignis abfangen, auf das zuvor überprüfte Radio sowie auf das neu überprüfte Radio zugreifen.
PS
onclick scheint ein besseres (browserübergreifendes) Ereignis zu sein, um anzuzeigen, wann ein Radio überprüft wird, aber das nicht überprüfte Problem wird immer noch nicht gelöst.
Ich nehme an, es ist sinnvoll, warum das Ändern eines Kontrollkästchentyps in einem solchen Fall funktioniert, da es den Wert ändert, den es beim Aktivieren oder Deaktivieren des Kontrollkästchens übermittelt. Ich wünschte, die Optionsfelder hätten sich eher wie die Änderung eines SELECT-Elements verhalten, aber was können Sie tun ...
quelle
myRadios
, um die Variable zu lesen,prev
die das aktuell ausgewählte Radio enthält. In jedem Klick-Handler wird ein Vergleich durchgeführt, um zu entscheiden, ob das angeklickte Radio mit dem darin gespeicherten identisch ist.prev
Wenn nicht, wird das aktuell angeklickte Radio dort gespeichert. Innerhalb des Klick-Handlers haben Sie Zugriff auf das zuvor ausgewählte:prev
und das aktuell ausgewählte Radio:this
rad[i].addEventListener('change', function(){ //your handler code })
und es funktioniert sowohl für die Maus als auch für die TastaturIch würde zwei Änderungen vornehmen:
onclick
stattdessen den Handleronchange
- Sie ändern den "geprüften Status" des Funkeingangs, nicht denvalue
, sodass kein Änderungsereignis auftritt.this
als Parameter, um zu überprüfen, welcher Wert aktuell ausgewählt ist.ETA: Zusammen mit Ihrer
handleClick()
Funktion können Sie den ursprünglichen / alten Wert des Radios in einer Variablen mit Seitenbereich verfolgen. Das ist:quelle
onclick
Handler ist nur schlecht benannt - er behandelt das Ereignis der Auswahl von Optionsfeldern, unabhängig davon, ob die Schaltfläche durch Drücken der Eingabetaste auf einer Tastatur angeklickt, berührt oder aktiviert wird. Deronchange
Handler ist in diesem Fall nicht geeignet, da sich der Wert der Eingabe nicht ändert, sondern nur das aktivierte / nicht aktivierte Attribut. Ich habe ein Beispielskript hinzugefügt, um den vorherigen Wert zu adressieren.Wie Sie diesem Beispiel entnehmen können: entnehmen http://jsfiddle.net/UTwGS/
HTML:
jQuery:
sowohl die
click
als auchchange
Ereignisse werden ausgelöst, wenn eine Optionsfeldoption ausgewählt wird (zumindest in einigen Browsern).Ich sollte auch darauf hinweisen, dass in meinem Beispiel das
click
Ereignis immer noch ausgelöst wird wenn Sie mit Tab und Tastatur eine Option auswählen.Mein Punkt ist also, dass, obwohl das
change
Ereignis in einigen Browsern ausgelöst wird, dasclick
Ereignis die Abdeckung bieten sollte, die Sie benötigen.quelle
console.log
mein Code eine Anweisung enthält, die IE7 nicht unterstützt. Sie können es einfach im IE alarmieren, wenn Sie möchten.click
undchange
Event - Handler, werden Sie den Handler zweimal Aufruf enden. In diesem Fall kann dies zu schlechten Konsequenzen führen, da sich @Matthew mit dem vorherigen Wert befasst.click
ist hier der richtige Handler und der einzige, den Sie brauchen. Ihre Überarbeitung verdeutlicht dies, daher entferne ich meine Ablehnung.Was ist mit dem Änderungsereignis von Jquery?
jsfiddle: http://jsfiddle.net/f8233x20/
quelle
$(this).val()
kann auch durch natives Javascript ersetzt werdene.currentTarget.value
, wobei e das Ereignisobjekt ist, das durch die Rückruffunktion übergeben wird.Wie Sie hier sehen können: http://www.w3schools.com/jsref/event_onchange.asp Das Attribut onchange wird für Optionsfelder nicht unterstützt.
Die erste von Ihnen verknüpfte SO-Frage gibt Ihnen die Antwort: Verwenden Sie
onclick
stattdessen das Ereignis und überprüfen Sie den Optionsfeldstatus innerhalb der von ihm ausgelösten Funktion.quelle
onclick
ist nicht dieselbe Semantik, da Sie die Überprüfbarkeit eines Optionsfelds durch Tastatureingabe ändern können, wenn die Auswahl der Tastaturform aktiviert ist.Ich glaube nicht, dass es eine andere Möglichkeit gibt, als den vorherigen Status zu speichern. Hier ist die Lösung mit jQuery
Nachdem ich ein bisschen mehr darüber nachgedacht hatte, beschloss ich, die Variable loszuwerden und die Klasse hinzuzufügen / zu entfernen. Folgendes habe ich bekommen: http://jsfiddle.net/BeQh3/2/
quelle
Ja, es gibt kein Änderungsereignis für das aktuell ausgewählte Optionsfeld. Das Problem ist jedoch, wenn jedes Optionsfeld als separates Element verwendet wird. Stattdessen sollte eine Funkgruppe als ein einzelnes Element betrachtet werden
select
. Daher wird für diese Gruppe ein Änderungsereignis ausgelöst. Wenn es ein istselect
Element handelt, kümmern wir uns nie um jede Option, sondern nehmen nur die ausgewählte Option. Wir speichern den aktuellen Wert in einer Variablen, die zum vorherigen Wert wird, wenn eine neue Option ausgewählt wird. Ebenso müssen Sie eine separate Variable zum Speichern des Werts des aktivierten Optionsfelds verwenden.Wenn Sie das vorherige Optionsfeld identifizieren möchten, müssen Sie das
mousedown
Ereignis wiederholen .siehe dies: http://jsfiddle.net/diode/tywx6/2/
quelle
Speichern Sie das zuvor überprüfte Radio in einer Variablen:
http://jsfiddle.net/dsbonev/C5S4B/
HTML
JS
JS BEISPIELCODE
quelle
Mir ist klar, dass dies ein altes Problem ist, aber dieser Codeausschnitt funktioniert für mich. Vielleicht wird es jemand in Zukunft nützlich finden:
quelle
onkeydown="radioChange('juju','button1',radioArray);"
Sie auch erfassen, wenn ein Benutzer Speicherplatz zum Überprüfen des Radios verwendet.Dies ist mir ein Rätsel, aber Sie können für jedes Optionsfeld ein onClick-Ereignis durchführen, ihnen alle unterschiedlichen IDs geben und dann eine for-Schleife im Ereignis erstellen, um jedes Optionsfeld in der Gruppe zu durchlaufen und herauszufinden, welches ist wurde durch Betrachten des Attributs 'geprüft' überprüft. Die ID der aktivierten Variable wird als Variable gespeichert. Möglicherweise möchten Sie jedoch zuerst eine temporäre Variable verwenden, um sicherzustellen, dass sich der Wert dieser Variablen geändert hat, da das Klickereignis auslösen würde, ob ein neues Optionsfeld aktiviert wurde oder nicht.
quelle
quelle
Wenn Sie Inline-Skripte vermeiden möchten, können Sie einfach im Radio auf ein Klickereignis warten. Dies kann mit einfachem Javascript erreicht werden, indem ein Klickereignis angehört wird
quelle
Sie können das folgende JS-Skript hinzufügen
quelle
das funktioniert bei mir
quelle
Dies ist die einfachste und effizienteste Funktion, mit der Sie einfach so viele Schaltflächen hinzufügen können, wie Sie möchten. Aktivieren Sie das Kontrollkästchen = false und lassen Sie das Onclick-Ereignis jedes Optionsfelds diese Funktion aufrufen. Geben Sie jedem Optionsfeld eine eindeutige Nummer an
quelle
Am einfachsten und kraftvollsten
schreibgeschützte Funkeingänge mit getAttribute
quelle