92 votes

Vérifier si la case à cocher n'est PAS cochée au moment du clic - jQuery

Je veux vérifier si une case à cocher vient d'être décochée, lorsqu'un utilisateur clique dessus. La raison en est que je veux faire une validation lorsqu'un utilisateur décoche une case à cocher. Parce qu'au moins une case à cocher doit être cochée. Donc, s'il décoche la dernière, elle se recoche automatiquement.

Avec jQuery, je peux facilement savoir s'il est coché ou non :

$('#check1').click(function() {
    if($(this).is(':checked'))
        alert('checked');
    else
        alert('unchecked');
});

Mais en fait, je veux seulement avoir une instruction if qui vérifie si une case à cocher vient d'être décochée.

J'ai donc pensé que je pourrais le faire avec le code suivant :

$('#check2').click(function() {
    if($(this).not(':checked'))
        alert('unchecked');
    else
        alert('checked');
});

Mais le message "non vérifié" s'affichera toujours. Ce n'est pas vraiment ce que j'attendais...

démo : http://jsfiddle.net/tVM5H/

Donc, éventuellement, j'ai besoin de quelque chose comme :

$('#check2').click(function() {
    if($(this).not(':checked')) {
        // Got unchecked, so something!!!
    }
});

Mais de toute évidence, cela ne fonctionne pas. Je ne veux pas utiliser le premier exemple, car j'aurais alors une instruction "else" inutile alors que je n'ai besoin que d'une instruction "if".

Alors premièrement, est-ce que c'est un bug de JQuery ? Parce que pour moi, c'est un comportement inattendu. Et deuxièmement, quelqu'un a-t-il une idée d'une bonne alternative ?

2voto

Nathan Friend Points 4808

Jetez un coup d'œil à certaines des réponses à cette question - je pense qu'elle pourrait s'appliquer à la vôtre :

comment exécuter la fonction de clic après le comportement par défaut d'un élément

Je pense que tu te heurtes à une incohérence dans l'implémentation du navigateur de la fonction onclick fonction. Certains choisissent de faire basculer la case à cocher avant le déclenchement de l'événement, d'autres après.

1voto

Praveen04 Points 138

La réponse a déjà été postée. Mais nous pouvons utiliser Jquery de cette façon aussi.

Démonstration

$(function(){
    $('#check1').click(function() {
        if($('#check1').attr('checked'))
            alert('checked');
        else
            alert('unchecked');
    });

    $('#check2').click(function() {
        if(!$('#check2').attr('checked'))
            alert('unchecked');
        else
            alert('checked');
    });
});

0voto

Usman Y Points 157

Faites-le comme ceci

if (typeof $(this).attr("checked") == "undefined" )

// To check if checkbox is checked
if( $(this).attr("checked")=="checked")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X