jQuery aktivieren / deaktivieren Optionsfeld onclick
Habe ich diesen code aktivieren/deaktivieren Sie ein radio-button-onclick.
Ich weiß, es ist nicht gut für die UI, aber ich brauche diese.
$('#radioinstant').click(function() {
var checked = $(this).attr('checked', true);
if(checked){
$(this).attr('checked', false);
}
else{
$(this).attr('checked', true);
}
});
Die obige Funktion nicht funktioniert.
Wenn ich auf den button klicken, ändert sich nichts. Es aktiviert bleiben. Warum? Wo ist der Fehler??? Ich bin kein jQuery-Experte. Ich bin auf jQuery 1.3.2
Nur klar zu sein #radioinstant
ist die ID des radio-button.
Kommentar zu dem Problem
Man sollte beachten, dass, wenn Sie auch etwas zu tun mit diesem radio basierend auf seinen status überprüft haben, erhalten Sie möglicherweise irreführend 'checked' - Werte auf onclick-Ereignisse. Eine Lösung ist, weisen Sie auf mousedown-der Wert, den Sie vergeben, um es (das Gegenteil von dem, was es hat) in eine variable, auf den Punkt, wie dieses.__rval, und überprüfen Sie Ihre Existenz in Ihrer onclick-handler. Wenn es existiert, kennen Sie den Wert in Ordnung ist, obwohl das diesem.überprüft werden kann, zu ändern.
InformationsquelleAutor der Frage DiegoP. | 2011-05-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn alles, was Sie tun möchten, ist eine checkbox, die prüft, sorgen sich nicht über es zu tun mit JQuery. Das ist Standard-Funktionalität einer checkbox klicken. Jedoch, wenn Sie wollen, um zusätzliche Dinge, die Sie hinzufügen können Sie mit JQuery. Vor jQuery 1.9, die Sie verwenden können, verwenden Sie
$(this).attr('checked');
zu erhalten die Wert statt$(this).attr('checked', true);
, als zweites wird der Wert gesetzt.Hier ist ein fiddle-demonstration, die zeigt, dass die Standard-checkbox-Funktionalität vs. was Sie tun mit JQuery.
Hinweis: Nach JQuery 1.6, sollten Sie
$(this).prop;
statt$(this).attr
in allen drei Orten (danke @Whatevo für den Hinweis und siehe hier für weitere details).UPDATE:
Sorry, verpasste der Voraussetzung, dass es ein radio-button. Sie können immer noch wollen, betrachten Sie die checkbox, aber hier ist der aktualisierte code für den radio-input version. Es funktioniert durch die Einstellung derpreviousValue
als Attribut auf das Kontrollkästchen, wie ich glaube nicht, dassprop
unterstützt 1.3.2. Man könnte dies auch in einem Gültigkeitsbereich von Variablen, wie manche Menschen wissen nicht, wie die Einstellung zufällige Attribute auf Felder. Hier ist das neue Beispiel.UPDATE 2:
Als Josh darauf hingewiesen, die bisherige Lösung war nur möglich mit einem radio-button. Hier ist eine Funktion, eine Gruppe von Funkgeräten abwählbar durch Ihren Namen und eine fiddle:
InformationsquelleAutor der Antwort Briguy37
Habe ich erweitert auf die bisherigen Vorschläge.
Dies funktioniert für mich, mit dem mehrere Geräte gekoppelt, die den selben Namen.
InformationsquelleAutor der Antwort Jurrie
Anstatt sich die checked-Wert, den Sie setzen es mit:
Richtig:
Eine funktionierende Lösung (mit mehreren radio-buttons mit unterschiedlichen Werten):
P. S.:
$().attr
sollte verwendet werden, anstelle von$().prop
für jquery < 1.6Demo: jsFiddle
InformationsquelleAutor der Antwort manji
Beste und kürzeste Lösung. Es funktioniert für jede Gruppe von Funkgeräten (mit demselben Namen).
Mehr Informationen hier.
Genießen.
InformationsquelleAutor der Antwort Slavik Meltser
Ich glaube, das ist das problem: Wenn Sie mehr als ein radio-button, und eine von Ihnen angeklickt wird, es gibt keine Möglichkeit zum deaktivieren Sie alle von Ihnen. Was benötigt wird, ist ein "keine oder nur eine" Auswahl, also Kontrollkästchen nicht angemessen wäre. Sie hätten einen "clear" button oder so etwas, deaktivieren Sie alle, aber es wäre schön, um nur auf den markierten radio-button, um es zu deaktivieren und gehen Sie zurück zu den "none" - Zustand, so dass Sie nicht Unordnung Ihre Benutzeroberfläche mit einer extra Kontrolle.
Das problem mit der Verwendung eines Klick-Prozedur ist, dass durch die Zeit, die aufgerufen wird, den radio-button ist bereits aktiviert. Sie weiß nicht, ob dies das erste oder klicken Sie auf einen zweiten Klick auf ein schon markiertes Optionsfeld. So bin ich mit zwei event Handler mousedown zu setzen, den vorherigen Zustand, dann wird der click-handler, wie oben verwendet:
InformationsquelleAutor der Antwort jeeber
toggleAttr()
wird durch diese sehr schöne und kleine plugin.Beispielcode
Noch mehr Spaß, demo
Können Sie platzieren Sie Ihre radio-button in label oder button-tags und einige nette Dinge.
InformationsquelleAutor der Antwort Nabil Kadimi
Verbesserte version der Antwort von Jurrie
Live-Demo
InformationsquelleAutor der Antwort Mithun Sreedharan
Getestet, die einige der oben genannten Lösungen haben bei mir nicht funktioniert 100%, habe ich beschlossen, meine eigenen erstellen. Es schafft neue, klicken Sie auf die Zuhörer, die nach einem radio-button geklickt wird:
InformationsquelleAutor der Antwort mick88
-- EDIT --
Sieht es sicher wie dein code dazu zwingt, radio-Eingang zu Verhalten, wie ein checkbox-input. Man könnte meinen, über die nur mit einer checkbox-Eingabe ohne die Notwendigkeit für jQuery. Allerdings, wenn Sie erzwingen wollen, so wie @manji sagte, Sie brauchen, um den Wert zu speichern außerhalb der click-handler, und dann legen Sie es auf jede klicken Sie, um das Gegenteil von dem, was es ist an jener Zeit. @manji ' s Antwort ist richtig, ich würde nur hinzufügen, dass Sie sollten cache-jQuery-Objekten anstelle von re-Abfragen der DOM:
InformationsquelleAutor der Antwort Code Maverick
DiegoP,
Ich hatte das gleiche Problem, bis ich merkte, dass der check auf der box nicht gehen, bis das Attribut entfernt wird. Das bedeutet, dass selbst wenn der aktivierte Wert wird falsch gemacht, Sie wird dort bleiben.
Daher verwenden die removeAttr () - Funktion, und entfernen Sie das geprüft attrib und es WIRD auf jeden Fall FUNKTIONIEREN.
InformationsquelleAutor der Antwort iamkhush
Wenn Sie noch mehr Antworten, die ich gefunden habe, dass dies funktioniert mit allen radio-buttons:
InformationsquelleAutor der Antwort Nicole
Diese Funktion fügt ein check/deaktiviert, um alle Optionsfelder
InformationsquelleAutor der Antwort Remco
Nahm ich https://stackoverflow.com/a/13575528/80353 und angepasst, wie dies
InformationsquelleAutor der Antwort Kim Stacks
Ich würde vorschlagen, diese:
Ihre HTML würde so Aussehen:
InformationsquelleAutor der Antwort Tad Carter
Ich habe eine Verwandte, aber anders. Folgende ist, was ich Tue:
Hinweis: Code zu aktivieren/deaktivieren Sie alle Optionsfelder der Klasse 'containerRadio', wenn die wichtigsten radio-button ausgewählt ist.
CODE
InformationsquelleAutor der Antwort Lijo
Ich hatte ein ähnliches problem - ich hatte, um ein Dialogfeld zu öffnen, aus den dropdown-je nach Auswahl aus dropdown-werde ich zeigen, ein oder zwei radio-button. Nur ein radio-button aktiviert werden können, zu einer Zeit.
Das script funktioniert einige Zeit einige Zeit-es injiziert geprüft, sondern checkbox noch nicht aktiviert
Ging ich zu jQuery
.prop()
, scheintjquery .prop() .attr()
hat einige Komplikation mit radio-buttons, während mit attr oder prop. So Was habe ich stattdessen auslösen klicken Sie auf den radio-button der Basis-auf Wert Auswählen.Beheben die Notwendigkeit der Verwendung von attr oder prop oder mit auf aus langen code.
Nicht sicher, ob dies ist die beste Praxis aber ist es - Funktioniert wie Charme
InformationsquelleAutor der Antwort Shraftali
hier ist die einfache Lösung, ich hoffe es wird Euch helfen. hier ein einfaches Beispiel zur Verbesserung der Antwort.
Demo
sorry für zu spät.. 🙂
InformationsquelleAutor der Antwort sajid
Diese Letzte Lösung ist die, die für mich gearbeitet. Ich hatte problem mit Undefinierten und Objekt-Objekt "oder" immer false zurückgeben, dann wird immer "true" zurückgeben, aber diese Lösung funktioniert, wenn die überprüfung und un-überprüfung.
Dieser code zeigt Felder an, wenn Sie geklickt werden und blendet die Felder beim un-geprüft :
InformationsquelleAutor der Antwort user7957126
Den Lösungen, die ich habe versucht, aus dieser Frage nicht für mich arbeiten. Von den Antworten, die gearbeitet, teilweise habe ich noch festgestellt, dass ich hatte, um auf das vorher nicht aktiviert radio-button zweimal, nur um es nochmals überprüft. Ich bin momentan auf der Verwendung von jQuery 3+.
Nach Herumspielen mit dem Versuch, diese zu bekommen, um die Arbeit mit Daten, Attribute oder andere Attribute, endlich fand ich die Lösung durch die Verwendung einer Klasse statt.
Für Ihr aufgegebenes radio-Eingang, geben Sie die Klasse
checked
z.B.:Hier ist die jQuery:
InformationsquelleAutor der Antwort kjdion84
Wenn Sie auf klicken Sie auf und prüfen nur, wenn radio aktiviert ist und dann deaktivieren, werden Sie nie das radio überprüft. Also vielleicht einfachste ist die Verwendung von Klassennamen wie:
InformationsquelleAutor der Antwort Alf Georg Østebrøt