2009-09-21 8 views
98

Comment faire pour cocher/décocher l'événement de <input type="checkbox" /> avec jQuery?Catch vérifié changer l'événement d'une case à cocher

+0

Si vous utilisez une version relativement récente de JQuery, j'utiliser le .on ('changement', function() {...}) tel que mentionné dans @Daniel De Leon réponse ci-dessous. Un avantage, l'écouteur d'événement "on" se liera au html généré dynamiquement. – BLang

Répondre

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

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

Edit: Faire cela ne sera pas attraper lorsque la case change pour d'autres raisons d'un clic, comme l'utilisation du clavier. Pour éviter ce problème, écoutez change au lieu de click.

Pour le contrôle/décochant programme, jetez un oeil à Why isn't my checkbox change event triggered?

+0

document.getElementById ('something'). Checked fonctionne, pourquoi $ ('# something'). Checked ne fonctionne pas? – omg

+0

Il vous manque un paran dans votre code et vous devriez vraiment utiliser la méthode jQuery pour obtenir l'état de vérification. –

+0

Parce que $ ('# something') renvoie un objet jQuery pas un ElementNode –

2

utiliser l'événement click pour une meilleure compatibilité avec MSIE

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

Comment juger si elle est cochée ou non? – omg

+0

J'ai besoin de savoir si un clic signifie de le cocher ou de le décocher. – omg

+1

vous pouvez ensuite utiliser $ (this) .is (': checked') pour tester l'état de l'élément cliqué juste –

17

Utilisez le sélecteur :checked pour déterminer l'état de la case à cocher:

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

besoin d'une autre parenthèse dans votre condition ... si ($ (this) ... –

+1

@Ty W - merci, fixe – 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

Hey! Buddy, que faites-vous ici? – omg

+0

On dirait une sélection de gamme (c.-à-vérifier la premier élément, maintenez la touche Maj enfoncée, vérifiez la dernière, et toutes les autres sont vérifiées.) Cependant, c'est beaucoup plus que ce que la question demande, mais il manque un peu de code, comme checkUncheckAll(). – joelsand

3

Utilisez ci-dessous code snipp et pour y parvenir .:

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

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

Ou vous pouvez faire la même chose avec case à cocher simple:

$('#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'); 
    } 
}); 

Pour démonstration: http://jsfiddle.net/creativegala/hTtxe/

35

Le clic aura une incidence sur une étiquette si nous avons un joint à la case à cocher d'entrée?

Je pense qu'il est préférable d'utiliser la fonction .Modification()

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

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

Pour JQuery 1.7+ utilisation:

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

Dans mon expérience, j'ai dû tirer parti currentTarget de l'événement :

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

Ce code fait ce que votre besoin:

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

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

En outre, vous pouvez vérifier sur jsfiddle