31 Stimmen

JQuery - Wert des Attributs festlegen

Ich habe folgendes HTML mit zwei Elementen, die den gleichen Namen haben

Durch JQuery möchte ich das Kontrollkästchen aktivieren. Also benutze ich etwas wie dies:

$('#chk0').attr("disabled",false);

Aber das funktioniert nicht. Ich nehme an, dass JQuery sich mit zwei Elementen mit dem gleichen identischen Namen verwirrt. Leider kann ich nicht vermeiden, zwei verschiedene Namen zu verwenden, weil ich möchte, dass alle Kontrollkästchen beim Absenden des Formulars übermittelt werden (nicht nur diejenigen, die ausgewählt sind). Daher muss ich ein verstecktes Element mit demselben Namen verwenden. Zurück zur Frage, wie kann ich das Kontrollkästchen in dem obigen Szenario durch JQuery aktivieren? Gibt es ein "type"-Parameter für attr, der hidden von checkbox unterscheidet?

Danke

29voto

Gabriele Petrioli Punkte 182294

Einige Dinge vor dem eigentlichen Code ..

Das Hash (#), den Sie als Selektor verwenden, ist für IDs und nicht für Elementnamen. Auch das disabled-Attribut ist kein true false-Szenario .. Wenn es das disabled-Attribut hat, bedeutet es, dass es true ist .. Sie müssen das Attribut entfernen und nicht auf false setzen. Auch gibt es die Formularselektoren, die bestimmte Arten von Elementen in einem Formular identifizieren ..

also wäre der Code

$("input:checkbox[name='chk0']").removeAttr('disabled');

Die Antwort auf den neuesten Stand bringen

Sie sollten die .prop() Methode verwenden (hinzugefügt seit v1.6)

$("input:checkbox[name='chk0']").prop('disabled', false); // um das Kontrollkästchen zu aktivieren

und

$("input:checkbox[name='chk0']").prop('disabled', true); // um das Kontrollkästchen zu deaktivieren

0 Stimmen

Dies funktioniert perfekt... Wenn ich das Kontrollkästchen aktivieren muss, wird es dann $("input:checkbox[name='chk0']").attr('disabled',false);

0 Stimmen

Gut.. wie in der w3schools.com/tags/att_input_disabled.asp gezeigt, wäre der offizielle Wert, den man setzen sollte, wieder disabled, also $("input:checkbox[name='chk0']").attr('disabled','disabled')‌​;

0 Stimmen

Verstanden.. Danke an Hogan dafür.. $("input:checkbox[name='chk0']").attr('disabled','disabled')‌​; funktioniert gut

11voto

Tim Down Punkte 304837

Ernsthaft, verwenden Sie jQuery für dies nicht. disabled ist eine boolesche Eigenschaft von Formularelementen, die in jedem gängigen Browser seit 1997 einwandfrei funktioniert, und es gibt keine Möglichkeit, einfacher oder intuitiver zu ändern, ob ein Formularelement deaktiviert ist oder nicht.

Der einfachste Weg, um einen Verweis auf das Kontrollkästchen zu erhalten, besteht darin, ihm eine id zu geben. Hier ist mein vorgeschlagenes HTML:

Und die JavaScript-Zeile, um das Kontrollkästchen zu aktivieren:

document.getElementById("chk0_checkbox").disabled = false;

Wenn Sie möchten, können Sie stattdessen jQuery verwenden, um das Kontrollkästchen zu erhalten:

$("#chk0_checkbox")[0].disabled = false;

0 Stimmen

+1 Verwenden Sie jQuery für das, wofür es gut ist, wenden Sie es nicht blindlings überall an.

0 Stimmen

Ist es falsch, jQuery zu verwenden, nur um das richtige Element auszuwählen? In einem Fall, in dem Sie zwei Elementen die gleiche ID gegeben haben, aber sie in andere Elemente mit unterschiedlichen IDs verschachtelt haben, damit Sie eines mit $(#parent1 #child) und das andere mit $(#parent2 #child) auswählen können?

0 Stimmen

@BCarpe: Es ist ungültig und sollte vermieden werden, zwei Elemente mit derselben id zu haben. Es ist jedoch sinnvoll, jQuery zu verwenden, um gleichzeitig eine Eigenschaft mehrerer Elemente festzulegen. Ich würde vorschlagen, in jQuery 1.6 $("whatever").prop("disabled", false) zu verwenden.

5voto

Hogan Punkte 65759

"Wahr" und "Falsch" funktionieren nicht, um zu deaktivieren, auf "disabled" setzen.

$('.someElement').attr('disabled', 'disabled');

Zum aktivieren, entfernen.

$('.someElement').removeAttr('disabled');

Außerdem brauchen Sie sich keine Sorgen darum machen, dass mehrere Elemente ausgewählt wurden, jQuery wird auf alle angewendet, die übereinstimmen. Wenn Sie nur eins benötigen, können Sie viele Optionen verwenden: :first, :last, nth, usw.

Sie verwenden name und nicht id wie von anderen erwähnt - denken Sie daran, wenn Sie id verwenden, verlangt gültiges xhtml, dass die ids eindeutig sind.

3 Stimmen

attr tut nicht, was du denkst, dass es tut.

2voto

Vincent Ramdhanie Punkte 100426

$("#chk0") bezieht sich auf ein Element mit der ID chk0. Sie könnten versuchen, IDs zu den Elementen hinzuzufügen. IDs sind eindeutig, auch wenn die Namen gleich sind, sodass Sie in jQuery auf ein einzelnes Element über dessen ID zugreifen können.

0 Stimmen

+1 das ist einfacher und wird viel schneller sein als der :checkbox Selector, der nicht standardmäßig ist (zwingt jQuery dazu, den langsamen Sizzle-Selector-Mechanismus anstelle der schnellen querySelectorAll-Methode des Browsers zu verwenden).

0voto

leepowers Punkte 36580

Verwenden Sie eine ID, um das Kontrollkästchen eindeutig zu identifizieren. Ihr aktuelles Beispiel versucht, das Kontrollkästchen mit einer ID von '#chk0' auszuwählen:

$('#chk0').attr("disabled", "disabled");

Sie müssen auch das Attribut disabled entfernen, um das Kontrollkästchen zu aktivieren. Etwas in der Art von:

$('#chk0').removeAttr("disabled");

Siehe die Dokumentation für removeAttr

Der XHTML-Wert für das Deaktivieren/Aktivieren eines Eingabeelements lautet wie folgt:

Beachten Sie, dass es das Fehlen des disabled-Attributs ist, das das Eingabeelement aktiviert.

0 Stimmen

Die Verwendung der gleichen ID für zwei verschiedene Elemente im selben Dokument ist ungültiges HTML.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X