2012-02-07 20 views
88

mam jakiś kodJak obsłużyć zmianę pola wyboru za pomocą jQuery?

<input type="checkbox" id="chk" value="value" /> 
<label for="chk">Value </label> 
<br/> 
<input type="button" id="But1" value="set value" /> 
<br /> 
<input type="button" id="But2" value="read checked" /> 

javascript:

$(document).ready(function() { 
    console.log("Ready ..."); 
    registerHandlers(); 

    function registerHandlers() { 
     $('#But1').click(function() { 
      $('#chk').prop('checked', !$('#chk').is(':checked')); 
     }); 
     $('#But2').click(function() { 
      var chk1 = $('#chk').is(':checked'); 
      console.log("Value : " + chk1); 
     }); 

     $('input[type="checkbox"]').change(function() { 
      var name = $(this).val(); 
      var check = $(this).prop('checked'); 
      console.log("Change: " + name + " to " + check); 
     }); 
    } 
}); 

Jak obsługiwać zmianę wyboru przy użyciu jQuery? Potrzebuję umieścić handlerka, aby zmienić zaznaczone pola wyboru.

[aktualizacja]

Jest pole wyboru i kilka przycisków. Każdy przycisk może zmieniać pole wyboru. Jak złapać wydarzenie zmieniające pole wyboru?

[Aktualizacja]

muszę obsłużyć zmiany wyboru w tym przykładzie jsfiddle. Po kliknięciu na przycisk komunikat "OK" nie jest wyświetlany.

+0

Naprawdę nie rozumiem twojego problemu? Co ma się stać, gdy pole wyboru zostanie zmienione? – Niklas

+0

W czym problem? Ten kod wydaje się działać dobrze – JaredPar

+2

Czy mógłbyś ponownie sformułować swoje pytanie? Masz już $ ('input [type = "checkbox"]'). Zmień handler'a, co jest nie tak? – Madman

Odpowiedz

136

Zastosowanie :checkbox selektor:

$(':checkbox').change(function() { 

     // do stuff here. It will fire on any checkbox change 

}); 

Kod: http://jsfiddle.net/s6fe9/

+65

... i "this.checked" jest bardzo przydatne do określenia, czy pole wyboru jest zaznaczone, czy nie. – Stefan

+0

Czy można zarejestrować wiele programów obsługi? – BILL

+0

Tak, możesz zasubskrybować tyle programów obsługi, ile potrzebujesz. – Samich

15

Hope, to byłoby pomocne.

$('input[type=checkbox]').change(function() { 
    if ($(this).prop("checked")) { 
     //do the stuff that you would do when 'checked' 

     return; 
    } 
    //Here do the stuff you want to do when 'unchecked' 
}); 
+6

od jQuery 1.6, lepiej użyć $ (this) .prop ("checked"), ponieważ zmieni się dynamicznie z faktycznym stanem pola wyboru. – hrabinowitz

+3

.attr ("zaznaczone") nie jest poprawne, ponieważ nie jest aktualizowane, gdy użytkownik kliknie. Potwierdzam komentarz @ hrabinowitz. – Adrien

+0

@hrabinowitz odpowiedział na aktualizację –

49

Można użyć Id pola oraz

$('#checkbox1').change(function() { 
    if($(this).is(":checked")) { 
     //'checked' event code 
     return; 
    } 
    //'unchecked' event code 
}); 
1
$('#myForm').on('change', 'input[type=checkbox]', function() { 
    this.checked ? this.value = 'apple' : this.value = 'pineapple'; 
}); 
+3

Proszę opracuj swoją odpowiedź: rozwiązania tylko do kodu są bardziej skłonne do usunięcia, ponieważ nie wyjaśniają, po prostu popraw (jeśli jakieś). – rekaszeru

+0

Sorry @rekaszeru Zrobię to lepiej następnym razem –

6
$("input[type=checkbox]").on("change", function() { 

    if (this.checked) { 

     //do your stuff 

    } 
}); 
+0

Proszę sprawdzić swój kod działa przed wysłaniem. Występuje rażący problem z selektorami ... – Jonathan

+0

Funkcja live() jest przestarzała. – guettli

0

Wydaje mi removeProp nie działa prawidłowo w Chrome: jsfiddle

 $('#badBut1').click(function() { 
     checkit('Before'); 
     if($('#chk').prop('checked')) 
     { 
      $('#chk').removeProp('checked'); 
     }else{ 
      $('#chk').prop('checked', true); 
     } 
     checkit('After'); 
    }); 
    $('#But1').click(function() { 
     checkit('Before'); 
     if($('#chk').prop('checked')) 
     { 
      $('#chk').removeClass('checked').prop('checked',false); 
     }else{ 
      $('#chk').addClass('checked').prop('checked', true); 
     } 
     checkit('After'); 
    }); 

    $('#But2').click(function() { 
     var chk1 = $('#chk').is(':checked'); 
     console.log("Value : " + chk1); 
    }); 

    $('#chk').on('change',function() { 
     checkit('Result'); 
    }); 
    function checkit(moment) { 
     var chk1 = $('#chk').is(':checked'); 
     console.log(moment+", value = " + chk1); 
    }; 
+0

Jak przełączyć pole wyboru bez zdarzenia (z zewnątrz): http://jsfiddle.net/k91k0sLu/1/ –

0

uzyskać wartość radiową przez nazwa

$('input').on('className', function(event){ 
     console.log($(this).attr('name')); 
     if($(this).attr('name') == "worker") 
      { 
       resetAll();     
      } 
    }); 
Powiązane problemy