Zunächst der Aufbau: jquery 1.5.1 Firefox 4.0
Das Ziel: Ich habe eine Reihe von Textfeldern, die mit Kontrollkästchen aktiviert/deaktiviert werden. Wenn ein Textfeld aktiviert ist, möchte ich, dass es einen Wert größer als Null hat.
HTML für eine der Boxen (es gibt eine variable Anzahl von Boxen auf der Seite):
<input type="text" value="0" name="RequestList[4].iCount" id="RequestList_4__iCount" class="num-box">
Mein jQuery mit .each, das nicht funktioniert:
var oneFill = false;
$('.num-box').each(function() {
var myItem = $(this);
if (myItem.attr('disabled') == false) {
if (myItem.val() > 0) {
oneFill = true;
}
}
});
if (!oneFill) {
Wenn ich den obigen Code in Firebug verfolge, tut er nichts. Er fährt mit der nächsten Codezeile fort (if(!oneFill)).
Wenn ich $('.num-box') in Firebug verwende, wird eine vollständige Liste aller Textboxen angezeigt. Ich bin also sehr zuversichtlich, dass ich den richtigen Selektor habe.
Die Frage ist also: Was habe ich falsch gemacht? Ich habe mir eine Reihe von Beispielen angesehen, und es scheint, dass meine Verwendung von .each korrekt war.
Aber, gibt es eine effizientere Methode für die Überprüfung aller aktivierten Textfelder mit Klasse von num-Box?
Zusatz1 @artlung Wenn ich mein obiges Beispiel weiterführe, würde ich mindestens folgendes haben:
<input type="text" value="0" name="RequestList[1].iCount" id="RequestList_1__iCount" class="num-box">
<input type="text" value="0" name="RequestList[2].iCount" id="RequestList_2__iCount" class="num-box">
<input type="text" value="0" name="RequestList[3].iCount" id="RequestList_3__iCount" class="num-box">
<input type="text" value="0" name="RequestList[4].iCount" id="RequestList_4__iCount" class="num-box">
Die Kontrollkästchen würden wie folgt aussehen:
<input type="checkbox" value="true" name="RDEquipListItem[1]" id="RDEquipListItem_1_">
<input type="checkbox" value="true" name="RDEquipListItem[2]" id="RDEquipListItem_2_">
<input type="checkbox" value="true" name="RDEquipListItem[3]" id="RDEquipListItem_3_">
<input type="checkbox" value="true" name="RDEquipListItem[4]" id="RDEquipListItem_4_">
Ich habe ein Java-Skript, das die Textfelder aktiviert/deaktiviert, wenn das entsprechende Kontrollkästchen markiert ist.
Bisher habe ich einige gute Anpassungen am Kern meines Codes gesehen. Ich werde morgen über diese abstimmen.
Ich bin verwirrt, weil ich nicht weiß, ob es ein Problem mit meinem .each-Teil gibt:
$('.num-box').each(function() {
Zusatz2 Ich habe mit einigen der Ergebnisse gespielt. Mein aktueller Code sieht so aus:
var oneFill = false;
var myEnabled = $('.num-box:enabled');
myEnabled.each(function() {
var myItem = $(this);
if (parseInt(myItem.val()) > 0) {
oneFill = true;
}
});
if (!oneFill) {
myEnabled erhält die korrekte Liste der Elemente, die aktiviert sind. Daumen hoch
Die Datei myEnabled.each bewirkt jedoch nichts.
Gibt es ein Problem mit einem einzelnen Element, das von .each verwendet wird?
Abschließende Bemerkung Ich bin mir nicht sicher, warum ich damit ein Problem hatte, aber ich musste die Logik ein wenig umstellen. Auch mit Firebug, würde es nicht in den ".each" Code Schritt, aber die Ergebnisse sind korrekt.
Endgültiger Code (HINWEIS: .num-box sind Textfelder, die durch Kontrollkästchen aktiviert/deaktiviert werden):
//make sure one item has been filled in and all are greater than zero
var allFilled = true;
var myEnabled = $('.num-box:enabled');
//check that we have at least one item checked out
if (myEnabled.length == 0) {
alert("At least one needs to be filled.");
return false;
}
$.each(myEnabled, function() {
var myItem = $(this);
if (parseInt(myItem.val()) <= 0) {
allFilled = false;
}
});
if (!allFilled)
{
//go do something