2013-06-03 18 views
27

Mam tę funkcję Check All, która sprawdza wszystkie pola wyboru. Używam do tego JQuery.JQuery - Zdarzenie checkbox-change nie jest uruchamiane, jeśli jest zaznaczone przy użyciu JQuery

Ale ja też mam ten on change funkcję przełączania klasę div Wrapper:

$('input[type="checkbox"]').on('change', function(){ 
    $(this).closest('div').toggleClass('highlight'); 
}); 

ta funkcja działa kiedy kliknij pole wyboru, ale nie jeśli klikam Check all.

Czy istnieje sposób ręcznego uruchomienia zdarzenia przy użyciu JQuery? Czy istnieje lepsze rozwiązanie?

Dzięki

EDIT:

Oto uproszczony HTML:

<a id="check_all">Check All</a> 
<div> 
    <input type="checkbox" name="cb" value="abc">ABC<br> 
</div> 
<div> 
    <input type="checkbox" name="cb" value="pqr">PQR<br> 
</div> 
<div> 
    <input type="checkbox" name="cb" value="xyz">XYZ<br> 
</div> 

Oto JSFiddle

http://jsfiddle.net/DarcFiddle/d4VTh/

+2

u można użyć wyzwalacza lub u można dodawać więcej ur kod tutaj tak ja/my możemy pomóc więcej. –

+1

jsfiddle please – BeNdErR

+0

Skąd wiadomo, że funkcja nie działa? Czy sprawdziłeś z debuggerem? – Andrei

Odpowiedz

50

Po zameldowaniu click wszystkim należy wywołać zmiany() wydarzenie jak to

$(document).ready(function(){ 
    $("input[type='checkbox']").on('change', function(){ 
     $(this).closest('div').toggleClass('highlight'); 
    }); 

    $("#check_all").on('click', function(){ 
     $("input[type='checkbox']").prop('checked', true).change(); 
    }); 
}); 
+1

Przepraszam, przepisuję kod, aby go uprościć. Nie ma błędu składni w prawdziwym. – hrsetyono

+2

zobacz zaktualizowaną odpowiedź. Działa poprawnie. – visnu

+0

Przepraszam, nie o to mi chodzi. Możesz to sprawdzić [JSFiddle] (http://jsfiddle.net/DarcFiddle/d4VTh/2/) Właśnie stworzyłem – hrsetyono

0

Można spróbować,

$(document).on('change','input[type="checkbox]' ,function(){ 
    // $this will contain a reference to the checkbox 
     var $this = $(this); 
    if ($this.is(':checked')){//To CHECK CHECK BOX IS CHECKED OR NOT 
     $(this).closest('div').toggleClass('highlight'); 
    } 
}); 

nadzieję, że pomoże,

+0

Dziękuję za poświęcony czas, ale jego nie działa. Możesz sprawdzić odpowiedź Visnu na idealną. – hrsetyono

1

To wywoła zdarzenie change, ale dopiero po powiązać go jako pierwszy.

$('input[type="checkbox]').trigger('change'); 
+0

Jestem dość newb w JQuery, więc nie jestem pewien, co jest wiążące. Przyjrzę się później. Ale na ten czas odpowiedź Visnu działa dobrze. – hrsetyono

+1

@DarcCode, jeśli używasz '.on()', wiążisz lub dołączasz zdarzenie do elementu –

+0

Więc od kiedy używam 'on()', oznacza to, że mój kod jest już powiązany? – hrsetyono

0

niemal identyczny do odpowiedzi Visnu, ale bezpośrednio wywołującego kliknięcie() zadziała wszystkie zdarzenia kliknięcia związani jQuery. Jeśli to demonstrujesz, zobaczysz, że to odznacza pola, podczas gdy jego odpowiedź po prostu usuwa wyróżnienie, gdy pozostają one kliknięte.

$(document).ready(function(){ 
    $("input[type='checkbox']").on('change', function(){ 
     $(this).closest('div').toggleClass('highlight'); 
    }); 

    $("#check_all").on('click', function(){ 
     $("input[type='checkbox']").click(); 
    }); 
}); 
0

Sprawdź to skrzypce modyfikacja kodu: http://jsfiddle.net/d4VTh/51/

$(document).ready(function(){ 
    $("input[type='checkbox']").on('change', function(){ 
     if (this.checked) 
      $(this).closest('div').addClass('highlight'); 
     else 
      $(this).closest('div').removeClass('highlight'); 
    }); 

    $("#check_all").on('click', function(){ 
     var item = $("input[type='checkbox']") 
     item.prop('checked', !item.prop('checked')).change(); 
    }); 
}); 
Powiązane problemy