Tıklamada onay kutusunun işaretli OLMADIĞINI kontrol edin - jQuery


87

Bir kullanıcı tıkladığında bir onay kutusunun henüz işaretlenmemiş olup olmadığını kontrol etmek istiyorum. Bunun nedeni, bir kullanıcı bir onay kutusunun işaretini kaldırdığında bir doğrulama yapmak istememdir. Çünkü en az bir onay kutusunun işaretlenmesi gerekiyor. Yani sonuncunun işaretini kaldırırsa, otomatik olarak kendini tekrar kontrol eder.

JQuery ile kontrol edilip edilmediğini kolayca öğrenebilirim:

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

Ama aslında sadece bir onay kutusunun işaretli olup olmadığını kontrol eden bir if ifadesine sahip olmak istiyorum.

Bu yüzden bunu aşağıdaki kodla yapabileceğimi düşündüm:

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

Ancak bu her zaman 'kontrol edilmemiş' mesajı gösterecektir. Beklediğim gibi değil ...

demo: http://jsfiddle.net/tVM5H/

Bu yüzden sonunda şöyle bir şeye ihtiyacım var:

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

Ama belli ki bu işe yaramıyor. İlk örneği kullanmak istemem çünkü o zaman sadece bir "if" ifadesine ihtiyacım olduğunda gereksiz bir "else" ifadesine sahip olurdum.

İlk olarak, bu bir jQuery hatası mı? Bana göre beklenmedik bir davranış. İkincisi, iyi bir alternatif arayan var mı?

Yanıtlar:



51

Zaten yayınlanan cevap işe yarayacaktır. JQuery'yi kullanmak istiyorsanız: bunu yapamazsınız:

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

veya

if ($(this).attr('checked') == false)

Bu yanıttaki ilk örnek, tüm seçenekler arasında okunması en kolay örnek gibi görünüyor, bu yüzden buna oy veriyorum.
Toby 1 Kenobi

5
$(document).ready(function() {
        $("#check1").click(function() {
            var checked = $(this).is(':checked');
            if (checked) {
                alert('checked');
            } else {
                alert('unchecked');
            }
        });
    });

4

jQuery kontrol edilecek mi? Gerçekten mi?

if(!this.checked) {

Ustura işi yapmak için bazuka kullanmayın.


4
Öğeyi bulmak için jQuery kullanıyorsanız, şu şekilde olmalıdır$(this)[0].checked
Chris,

@HoldOffHunger Bu, yerel girdi öğesinin bir parçasıdır: developer.mozilla.org/en-US/docs/Web/HTML/Element/input/… jQuery kullanıyorsanız, Chris'in yukarıdaki yorumda doğru sözdizimi vardır.
TheZ

@TheZ: Güzel! Evet, haklısın, Chris'in cevabı güzel. Öneri: Krediyle yanıtlamak için eklensin mi? Hem OP hem de en iyi yanıtlar, saf bir jQuery çözümü olan $ (selector) .is ('...') 'e dayanır. Sadece .checkedsahip oldukları yerde kullanmak .is('checked')kendi başına çalışmayacaktır.
HoldOffHunger


2

Bu sorunun yanıtlarından bazılarına göz atın - sizinki için geçerli olabileceğini düşünüyorum:

bir elemanın varsayılan davranışından sonra tıklama işlevi nasıl çalıştırılır

Sanırım, onclickişlevin tarayıcı uygulamasında bir tutarsızlıkla karşılaşıyorsunuz . Bazıları, etkinlik tetiklenmeden önce ve bazıları sonra onay kutusunu değiştirmeyi seçer.


Bu da gerçekten çok önemli.
TheZ

İşte bu yüzden jQuery kontrol edilecek. Gerçekten mi. ;)
JoeBrockhaus

1

Cevap zaten gönderildi. Ancak jquery'yi bu şekilde de kullanabiliriz.

demo

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

0

Böyle yap

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

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

Bu sadece olabilir this.checked. İlk satırın typeoforaya ihtiyacı yoktur (asla a yükseltmeyecektir ReferencError). Ayrıca bir boolean döndüren ve ikincinizi de gereksiz kılan prop()yerine kullanmalısınız attr().
alex
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.