Проверить, НЕ установлен ли флажок при нажатии - jQuery

86

Я хочу проверить, не сняли ли флажок, когда пользователь нажимает на него. Причина этого в том, что я хочу выполнить проверку, когда пользователь снимает флажок. Потому что нужно поставить хотя бы один флажок. Так что если он снимет отметку с последней, то она снова автоматически проверит себя.

С jQuery я могу легко узнать, проверено ли оно или нет:

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

Но на самом деле я хочу иметь только оператор if, который проверяет, был ли только что снят флажок.

Я подумал, что смогу сделать это с помощью следующего кода:

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

Но при этом всегда будет отображаться сообщение «не отмечен». Не совсем то, что я ожидал ...

демо: http://jsfiddle.net/tVM5H/

В конце концов мне нужно что-то вроде:

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

Но очевидно, что это не работает. Я скорее не хочу использовать первый пример, потому что тогда у меня будет ненужный оператор else, когда мне понадобится только один оператор if.

Итак, во-первых, это ошибка jQuery? Потому что для меня это неожиданное поведение. И во-вторых, у кого-нибудь есть идеи для хорошей альтернативы?

w00
источник

Ответы:

50

Уже опубликованный ответ будет работать. Если вы хотите использовать jQuery: not, вы можете сделать это:

if ($(this).is(':not(:checked)'))

или

if ($(this).attr('checked') == false)
chris_code
источник
Первый пример в этом ответе кажется самым легким для чтения из всех вариантов, поэтому я голосую за него.
Тоби 1 Кеноби
5

jQuery для проверки проверено? В самом деле?

if(!this.checked) {

Не используйте базуку для работы с бритвой.

TheZ
источник
4
Если для поиска элемента используется jQuery, он должен читать$(this)[0].checked
Крис
@HoldOffHunger Это часть собственного элемента ввода: developer.mozilla.org/en-US/docs/Web/HTML/Element/input/… Если вы используете jQuery, тогда Крис имеет правильный синтаксис в комментарии над вашим.
TheZ
@TheZ: Хорошо! Да, вы правы, ответ Криса хорош. Предложение: Добавить в ответ с пометкой? Оба ответа OP и top склоняются к $ (selector) .is ('...'), который является чистым решением jQuery. Использование только .checkedтам, где они есть .is('checked'), само по себе не сработает.
HoldOffHunger 07
5
$(document).ready(function() {
        $("#check1").click(function() {
            var checked = $(this).is(':checked');
            if (checked) {
                alert('checked');
            } else {
                alert('unchecked');
            }
        });
    });
Нанхе Кумар
источник
2

Ознакомьтесь с некоторыми ответами на этот вопрос - я думаю, он может относиться к вашему:

как запустить функцию щелчка после поведения элемента по умолчанию

Я думаю, вы столкнулись с несогласованностью в реализации onclickфункции в браузере . Некоторые предпочитают переключать флажок перед запуском события, а некоторые - после.

Натан Френд
источник
Это тоже действительно важно.
TheZ
И именно поэтому jQuery для проверки проверено. В самом деле. ;)
JoeBrockhaus 08
1

Ответ уже опубликован. Но мы также можем использовать jquery таким образом

демо

$(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');
    });
});
Правеен04
источник
0

Делай это так

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

// To check if checkbox is checked
if( $(this).attr("checked")=="checked")
Усман Юнас
источник
Это могло быть просто так this.checked. Первая строка там не нужна typeof(она никогда не поднимет a ReferencError). Вы также должны использовать prop()вместо attr(), который вернет логическое значение, что сделает ваш второй также избыточным.
Alex