2010-12-14 23 views
20

Za pomocą AJAX I wypełnij DIV kilkoma polami wyboru (każdy z własnym unikalnym identyfikatorem). Identyfikatory to "projectID1", "projectID2", "projectID3" i tak dalej ... Dałem wszystkim checkboxom klasę "pChk".jQuery Pokaż-Ukryj DIV na podstawie wartości pola wyboru

Moim końcowym celem jest pokazanie DIV zawierającego przycisk Prześlij, jeśli DOWOLNE z pól wyboru są zaznaczone. Jedyny przypadek ukrywania DIV zawierającego przycisk Prześlij oznacza, że ​​wszystkie pola wyboru są odznaczone.

Jednak kod, który wymyśliłem poniżej pokazuje/ukrywa DIV przycisku przycisku dla każdej instancji checkbox. Innymi słowy, jeśli mam trzy checkbooki CHECKED i I UNCHECK jeden z nich, DIV przycisku Submit zostanie ukryty.

Twoje porady ekspertów są mile widziane!

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

Pamiętaj, że jeśli * * pokaz przycisk submit z JS, należy również hide * * przycisk z JS, więc ludzi bez JavaScriptu enabled can * still * może użyć formularza, np. dla osób z czytnikami ekranu. –

+0

Możliwy duplikat [Przełącz div na podstawie wartości pola wyboru] (http://stackoverflow.com/questions/4337378/toggle-div-based-on-checkbox-value) –

Odpowiedz

10

Dzieje się tak, ponieważ sprawdzasz tylko bieżące pole wyboru.

Zmień go

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

aby sprawdzić, czy którykolwiek z wyboru jest zaznaczone (wiele kontroli w tej linii ..).

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

+0

Dziękuję bardzo! Działa jak urok! Niektórzy ludzie po prostu go zdobywają, a inni mnie lubią walczyć! – mickormick

+0

Jeśli usuniemy ".length> 0", nie będzie działać, jeśli są 2 lub więcej pól wyboru i 2 lub więcej treści do pokazania i ukrycia. Ale jeśli dodasz ".length> 0", działa jak urok. Czy możesz wyjaśnić tę logikę (będzie prosta, ale nie jestem w stanie zrozumieć). – Veer

+0

@ boer jest, ponieważ '$ ('. PChk: checked')' zawsze zwraca obiekt jquery niezależnie od znalezienia pasującego elementu lub nie. Obiekty sprawdzają się jako prawdziwe w sprawdzeniach "jeśli". –

2

Można rozważyć użycie :checked selector, dostarczone przez jQuery. Coś w tym stylu:

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

Samemu korzystam z tej metody. – mirzu

48

Jest to stary, jeśli ktoś ponownie napotyka to (przez wyszukiwanie). Prawidłowa odpowiedź z jQuery 1.7 roku jest teraz:

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

Naprawdę nie wiem, dlaczego tak jest przegłosowane ... to jest złe. Sprawdzasz tylko bieżącą pozycję, podczas gdy OP w konkretny sposób prosi o to, że ukrywanie powinno wystąpić tylko wtedy, gdy *** ALL *** ".pChk" elementy są odznaczone. Właśnie przepisałeś kod pytania (* który jest lepiej ze względu na bezpośrednie użycie 'this.checked' zamiast używania jquery nawet do tego .. *) –

+0

Tak, to źle ... –

5

ebdiv jest ustawiony style="display:none;"

jest prace pokazują & hide

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

}); 
13

używam jQuery prop

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

Try to

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

Sprawdza, czy zaznaczono co najmniej jedno pole wyboru.

2

Wskazówka wszystkim, którzy używają płasko-czerwonej, płasko-zielonej wtyczki, z powodu tej wtyczki odpowiedzi powyżej nie będą działać!

W takim przypadku należy użyć polecenia onchange = "do_tworzeń();" na etykiecie, na przykład: Twój check box tutaj

Powodem, dla którego nie działa, jest to, że ten Jquery tworzy wiele obiektów wokół prawdziwego pola wyboru, więc nie możesz zobaczyć, czy to się zmieniło, czy nie.

Ale jeśli ktoś kliknij prosto na pole wyboru, nie będzie działać: "(

Powiązane problemy