2009-09-21 9 views
98

Jak mogę złapać check/uncheck event z <input type="checkbox" /> z jQuery?Catch check change event of checkbox

+0

Jeśli używasz stosunkowo nową wersję JQuery, chciałbym użyć .Na („zmiana”, function() {...}) jak wspomniano w @Daniel De Leon's below below. Zaletą, detektor zdarzeń "on" będzie wiązał się z dynamicznie generowanym html. – BLang

Odpowiedz

127
<input type="checkbox" id="something" /> 

$("#something").click(function(){ 
    if($(this).is(':checked')) alert("checked"); 
}); 

Edit: Rozwiązanie to nie złapie, gdy pole zmienia się z innych powodów niż kliknięcia, jak za pomocą klawiatury. Aby uniknąć tego problemu, posłuchaj change zamiast click.

Przez zaznaczenie/odznaczenie programowo, spojrzeć na Why isn't my checkbox change event triggered?

+0

document.getElementById ('coś') sprawdzone prace, dlaczego $ ('# coś') sprawdzane.. nie działa? – omg

+0

W twoim kodzie brakuje paran i naprawdę powinieneś używać metody jQuery do sprawdzania stanu. –

+0

Bo $ („# coś”) zwraca obiekt jQuery nie jest ElementNode –

2

użyć zdarzenia click dla najlepszej kompatybilności z MSIE

$(document).ready(function() { 
    $("input[type=checkbox]").click(function() { 
     alert("state changed"); 
    }); 
}); 
+0

Jak ocenić, czy jest on sprawdzony, czy nie? – omg

+0

Muszę wiedzieć, czy kliknięcie oznacza to zaznaczenie lub odznaczenie. – omg

+1

można użyć $ (this) .is (': sprawdzane') aby sprawdzić stan tylko-klikniętego elementu –

17

użyć selektora :checked celu określenia stanu pole wyboru jest:

$('input[type=checkbox]').click(function() { 
    if($(this).is(':checked')) { 
     ... 
    } else { 
     ... 
    } 
}); 
+2

Potrzebuję innego nawiasu w twoim stanie ... jeśli ($ (this) ... –

+1

@Ty W - dzięki, naprawione – karim79

-2
$(document).ready(function(){ 
    checkUncheckAll("#select_all","[name='check_boxes[]']"); 
}); 

var NUM_BOXES = 10; 
// last checkbox the user clicked 
var last = -1; 
function check(event) { 
    // in IE, the event object is a property of the window object 
    // in Mozilla, event object is passed to event handlers as a parameter 
    event = event || window.event; 

    var num = parseInt(/box\[(\d+)\]/.exec(this.name)[1]); 
    if (event.shiftKey && last != -1) { 
    var di = num > last ? 1 : -1; 
    for (var i = last; i != num; i += di) 
     document.forms.boxes['box[' + i + ']'].checked = true; 
    } 
    last = num; 
} 
function init() { 
    for (var i = 0; i < NUM_BOXES; i++) 
    document.forms.boxes['box[' + i + ']'].onclick = check; 
} 

HTML:

<body onload="init()"> 
    <form name="boxes"> 
    <input name="box[0]" type="checkbox"> 
    <input name="box[1]" type="checkbox"> 
    <input name="box[2]" type="checkbox"> 
    <input name="box[3]" type="checkbox"> 
    <input name="box[4]" type="checkbox"> 
    <input name="box[5]" type="checkbox"> 
    <input name="box[6]" type="checkbox"> 
    <input name="box[7]" type="checkbox"> 
    <input name="box[8]" type="checkbox"> 
    <input name="box[9]" type="checkbox"> 
    </form> 
</body> 
+14

Hej! Kolego, co tu robisz? – omg

+0

Wygląda jak wybór zakresu (np. pierwszy element, przytrzymaj shift w dół, sprawdź ostatni i wszystkie są sprawdzane.) Jednak jest to znacznie więcej, niż pytanie, na które prosi, brakuje jakiegoś kodu, jak checkUncheckAll(). – joelsand

3

Użyj poniższego fragmentu kodu i aby to osiągnąć .:

$('#checkAll').click(function(){ 
    $("#checkboxes input").attr('checked','checked'); 
}); 

$('#UncheckAll').click(function(){ 
    $("#checkboxes input").attr('checked',false); 
}); 

Albo można zrobić to samo pole pojedynczego wyboru z:

$('#checkAll').click(function(e) { 
    if($('#checkAll').attr('checked') == 'checked') { 
    $("#checkboxes input").attr('checked','checked'); 
    $('#checkAll').val('off'); 
    } else { 
    $("#checkboxes input").attr('checked', false); 
    $('#checkAll').val('on'); 
    } 
}); 

Dla Demo: http://jsfiddle.net/creativegala/hTtxe/

35

Kliknięcie wpłynie etykietę jeśli mamy podłączony do pola wyboru wejścia?

myślę, że lepiej jest użyć funkcji .change()

<input type="checkbox" id="something" /> 

$("#something").change(function(){ 
    alert("state changed"); 
}); 
11

dla jQuery 1.7+ zastosowanie:

$('input[type=checkbox]').on('change', function() { 
    ... 
}); 
3

Z mojego doświadczenia wynika, miałem wykorzystać currentTarget zdarzenia, :

$("#dingus").click(function (event) { 
    if ($(event.currentTarget).is(':checked')) { 
    //checkbox is checked 
    } 
}); 
1

Ten kod robi to, co swoje potrzeby:

<input type="checkbox" id="check" >check it</input> 

$("#check").change(function(){ 
    if($(this).is(':checked')) { 
     alert("checked"); 
    }else{ 
     alert("unchecked"); 
    } 
}); 

Ponadto, można to sprawdzić na jsfiddle