aktivieren/deaktivieren Sie radio input mit javascript
Habe ich ein radio-input-Gruppe. Wenn ein radio ist geprüft und ich erneut klicken, wird es deaktiviert.
Gibt es einen Weg, um den vorherigen status der radio - onClick
Veranstaltung?
<input name="options" type="radio" onClick="resetMeIfChecked()">
<input name="options" type="radio" onClick="resetMeIfChecked()">
<input name="options" type="radio" onClick="resetMeIfChecked()">
- "vorheriger status" bedeutet die radio-Schaltfläche vorher aktiviert oder deaktiviert? Ist nicht der aktuelle Zustand ist es?
Du musst angemeldet sein, um einen Kommentar abzugeben.
jQuery edition
Aber nochmals, dies ist nicht wie radio-buttons verwendet werden sollen. Ich glaube, Sie wäre besser mit einer checkbox markieren ' es, wo Sie konnte, deaktivieren Sie alle anderen Kontrollkästchen als aktuellen geklickt (also immer max 1 ausgewählt)
Ein funktionierendes Beispiel
Seine ganz einfach. Folgen Sie nur dem einfachen Beispiel und
Finden Sie einfach die Länge und machen jeden index checked=true/false.
Ping mich an:-
http://manojbardhan2009.blogspot.com
Ich hatte das gleiche problem und es herausgefunden. Keine der oben genannten Antworten genau so funktioniert, wie ich wollte - die meisten von Ihnen erfordern eine zusätzliche Taste, um das Funkgerät zurückzusetzen. Das Ziel war, deaktivieren Sie radio, indem Sie auf das radio selbst.
Hier das fiddle: http://jsfiddle.net/MEk5Q/1/
Das problem war sehr kompliziert, weil die radio-Taste, value-änderungen VOR dem
click
event feuert also, wenn wir hören, um das Ereignis können wir nicht sagen, ob der radio-button bereits aktiviert war oder nicht. In beiden Fällen ist es bereits aktiviert ist.Ein weiterer Ansatz war zu hören
mousedown
Veranstaltung. Im Gegensatz zuclick
wird, feuert vor dem Wechsel radiochecked
Attribut, aber deaktivieren Sie es innerhalb von event-handler gibt uns nichts da, es wird überprüft, wieder im mouseup-Ereignis.Meine Antwort ist ein wenig hässlicher workaround, so dass ich generell nicht empfehlen, es an andere und wahrscheinlich werde ich es aufgeben mich. Es funktioniert, sondern es sich um 20ms timeout-Funktion, die ich bin nicht gern in Fällen wie diesem.
Hier ist der code Erklärung:
Als timeout-Funktion die ich verwenden könnte, eine Zeichenfolge (weniger schreiben), aber soweit ich weiß, wäre es
eval
'ed. Wenn ich nicht Vertraueneval
Funktion, ich bevorzugte anonyme Funktion.Noch eins - man könnte Fragen , warum die Verbreitung der code in zwei separaten event-Handler, während wir das Feuer der timeout-Funktion auf mousedown? Nun, was ist, wenn jemand drücken Sie die Maus auf ein radio und hält es für ein paar Sekunden oder sogar jemand ist einfach ein sehr langsamer Mensch ;). In der Regel, mit dieser Lösung lassen wir das problem der Zeitverzögerung zwischen
mousedown
undmouseup
.Wenn Sie benötigen ein paar mehr Infos über
dataset
, hier ist die MDN-Referenz:https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.dataset
Diese Eigenschaft kam mit HTML5 und könnte nicht cross-browser, denke ich, wenn Sie so wollen, 100% ig kompatibel ist, ersetzen Sie es mit einer anderen Lösung das wird, enthalten die Daten, you name it.
Sorry über jQuery hier und da, aber ich hoffe, du bist gut mit dabei - es war viel einfacher.
Hoffe, Sie werden es genießen.
JS:
Dieses Verhalten wird nicht erwartet, dass man für radio-buttons und ich weiß nicht empfehlen, es überhaupt nicht. Versuchen Sie einen anderen Weg finden, dieses Ziel zu erreichen. Verwenden Sie ein anderes Element oder eine andere option zum zurücksetzen des Feldes Wert:
http://jsfiddle.net/marcosfromero/rRTE8/
versuchen Sie dies:
Nie war ich glücklich darüber, gezwungen zu sein, Zielen auf das kleine radio-button, und so kam ich auf ein größeres Ziel UND ein Weg zu einem radio-Gruppe ab, ohne Rückgriff auf etwas, das würde stören die HTML - /JavaScript-Puristen.
Die Technik beruht auf der nicht missbrauchen die radio-buttons bei alle über event-Handler, aber die überprüfung für eine readonly-proxy für jeden statt. Alles enthalten ist, was unten in reinem JavaScript mit einem radio-Gruppe ein, wählen Sie eine Art von Käse oder ohne Käse überhaupt.
Habe ich absichtlich verwendet keine styling-in diesem Beispiel zu vermeiden, dass die hinzugefügte Ebene. Die dump-Taste wird Ihnen sagen, was die drei überprüft Staaten sind, so verwenden Sie es, zu vernehmen, was passiert ist, nachdem Sie die radio-oder text-input-Elemente. Zum Beispiel ich der Einfachheit halber eine Globale zu erinnern, den früheren Zustand, aber eine elegantere Methode ist die Verwendung eines dataset, das ich das, was ich in den code meiner Anwendung.
Wenn Sie klicken Sie auf die radio-buttons Sie wie erwartet arbeiten. Wenn Sie klicken Sie auf die text-Elemente nebeneinander, Sie sind ein proxy für die radio-buttons mit einer Ausnahme. Wenn Sie auf ein text-Element hat eine zugehörige radio-button, der ist bereits überprüft, es wird deaktivieren Sie es. Daher ist der text-proxy s-Ereignis ausgelöst, und nicht die radio-buttons.
Den zusätzlichen Vorteil, dass Sie nun schlagen Sie den größeren text Ziel zu.
Ich diesen verwenden. Sie einfach speichern Sie die pre-klicken Sie auf Wert, und ! in den Wert.
Wenn Sie wollen machen Sie es einfach und würde nicht dagegen, mit einem Doppelklick-Ereignis probieren Sie etwas wie dies: