2010-12-14 11 views
20

Mit AJAX bearbeite ich ein DIV mit einer Reihe von Checkboxen (jedes mit seiner eigenen eindeutigen ID). Die IDs sind "projectID1", "projectID2", "projectID3" und so weiter ... Ich habe allen Checkboxen eine Klasse von "pChk" gegeben.jQuery Show-Hide DIV basierend auf Checkbox Wert

Mein Endziel ist es, das DIV mit der Submit-Schaltfläche anzuzeigen, wenn eines der Kontrollkästchen aktiviert ist. Das einzige Mal, wenn das DIV mit der Submit-Schaltfläche ausgeblendet wird, ist, wenn alle Kontrollkästchen deaktiviert sind.

Der Code, den ich unten entwickelt habe, zeigt/verbirgt jedoch das Submit Button DIV für jede Checkbox-Instanz. Mit anderen Worten, wenn ich drei Checkboxen CHECKED und I UNCHECK eine davon habe, wird der Submit Button DIV ausgeblendet.

Ihr fachkundiger Rat ist mehr als willkommen!

function checkUncheck() { 
    $('.pChk').click(function() { 
     if (this.checked) { 
      $("#ProjectListButton").show(); 
     } else { 
      $("#ProjectListButton").hide(); 
     } 
    }); 
} 
+3

Denken Sie daran, dass, wenn Sie * Show * die Taste mit JS einreichen, sollten Sie auch * auszublenden * die Taste mit JS, so dass die Leute ohne JavaScript aktiviert kann * noch * das Formular verwenden. Leute mit Screenreadern, als Beispiel. –

+0

Mögliches Duplikat von [Toggle div basierend auf Checkbox-Wert] (http://stackoverflow.com/questions/4337378/toggle-div-based-on-checkbox-value) –

Antwort

10

Das liegt daran, dass Sie nur das aktuelle Kontrollkästchen aktivieren.

ändert es zu

function checkUncheck() { 
    $('.pChk').click(function() { 
     if ($('.pChk:checked').length > 0) { 
      $("#ProjectListButton").show(); 
     } else { 
      $("#ProjectListButton").hide(); 
     } 
    }); 
} 

zu überprüfen, ob eine der Kontrollkästchen aktiviert ist (viele Kontrollen in dieser Linie ..).

Referenz: http://api.jquery.com/checked-selector/

+0

Vielen Dank! Funktioniert wie ein Zauber! Manche Leute bekommen es einfach, während andere wie ich kämpfen! – mickormick

+0

Wenn wir ".length> 0" entfernen, funktioniert es nicht, wenn 2 oder mehr Kontrollkästchen und 2 oder mehr Inhalte zum Ein- und Ausblenden vorhanden sind. Aber wenn ".length> 0" hinzugefügt wird, funktioniert es wie Charme. Können Sie bitte diese Logik erklären (wird einfach sein, aber ich bin nicht in der Lage zu verstehen). – Veer

+0

@veer, weil '$ ('. PChk: checked')' immer ein jquery-Objekt zurückgibt, unabhängig davon, ob ein übereinstimmendes Objekt gefunden wurde oder nicht. Und Objekte werden in 'if'-Prüfungen als wahr bewertet. –

2

Sie betrachten könnte die :checked selector, zur Verfügung gestellt von jQuery verwenden. Etwas wie das:

$('.pChk').click(function() { 
    if($('.pChk:checked').length > 0) { 
     $("#ProjectListButton").show(); 
    } else { 
     $("#ProjectListButton").hide(); 
    } 
}); 
+0

Verwenden Sie diese Methode selbst. – mirzu

48

Während das alt ist, wenn jemand wieder über diese (über die Suche) kommt. Die richtige Antwort mit jQuery ab 1.7 ist jetzt:

$('.pChk').click(function() { 
    if($(this).is(':checked')) { 
     $("#ProjectListButton").show(); 
    } else { 
     $("#ProjectListButton").hide(); 
    } 
}); 
+4

Ich weiß wirklich nicht, warum das so upvoted ist .. es ist falsch. Sie überprüfen nur das aktuelle Element, während das OP ausdrücklich fragt, dass das Verstecken nur stattfinden soll, wenn *** ALLE *** '.pChk' Elemente deaktiviert sind. Sie haben gerade den Code der Frage neu geschrieben (* das ist besser wegen der direkten Verwendung von "this.checked" anstelle von Ihrer Verwendung von jquery selbst für diese .. *) –

+0

Ja, es ist falsch ... –

5

ebdiv style="display:none;" gesetzt

es Werke zeigen wird & hide

$(document).ready(function(){ 
    $("#eb").click(function(){ 
     $("#ebdiv").toggle(); 
    }); 

}); 
13

Ich benutze jQuery prop

$('#yourCheckbox').change(function(){ 
    if($(this).prop("checked")) { 
    $('#showDiv').show(); 
    } else { 
    $('#hideDiv').hide(); 
    } 
}); 
0

Try dies

$('.yourchkboxes').change(function(){ 
    $('.yourbutton').toggle($('.yourchkboxes:checked').length > 0); 
}); 

So wird es nach mindestens einem Kontrollkästchen überprüft wird überprüft oder nicht.

2

Ein Tipp an alle Leute, die flat-red, flat-green plugin verwenden, wegen dieses Plugins werden die obigen Antworten nicht funktionieren!

In diesem Fall verwenden Sie onchange = "do_your_stuff();" Auf dem Etikett, zum Beispiel: Ihr Kontrollkästchen hier

Der Grund, warum es nicht funktioniert, ist, dass diese Jquery viele Objekte um das echte Kontrollkästchen erstellt, so dass Sie nicht sehen können, ob es geändert wird oder nicht.

Aber wenn jemand gerade auf Kontrollkästchen klicken, wird nicht funktionieren: '(

Verwandte Themen