onay kutusu işaretliyse, bunu yapın


126

Bir onay kutusunu işaretlediğimde, onun dönmesini istiyorum <p> #0099ff .

Onay kutusunun işaretini kaldırdığımda, bunu geri almasını istiyorum.

Şu ana kadar sahip olduğum kod:

$('#checkbox').click(function(){
    if ($('#checkbox').attr('checked')) {
        /* NOT SURE WHAT TO DO HERE */
    }
}) 

1
"... işaretli olmadığında, aynı işlevi devre dışı bırakmak için." - iletilen işlev .click()tıklama olayında çağrılır. Bu nedenle "etkinleştir" ve "devre dışı bırak" ile ne demek istediğini anlamıyorum. Onay kutusu işaretliyse, işlevi çağırabilirsiniz a(). Ama onay kutusunu zaman çağırmak için ters fonksiyonunu yazmalıdır değil kontrol etti. Kafam karıştı.
jensgram

Elbette, olabilir .bind()ve .unbind()Etkinlikleri daha başka element onay kutusu durumuna dayalı. Peşinde olduğun bu mu?
jensgram

1
Spam gönderdiğim için özür dilerim ama bahsettiğim konuya bir örnek verdim.
jensgram

1
Bunun eski bir gönderi olduğunu biliyorum, ancak şimdi jQuery prop()bu sorunun ne için kullanmak istediğini kullanıyor attr(); prop()Yöntem daha sonra geri yaratılmış edilmemişti. Bununla ilgili cevaplar this.checkedmuhtemelen hala yararlıdır.
trysis

Yanıtlar:


235

Ben ediyorum kullanmak .change() ve this.checked:

$('#checkbox').change(function(){
    var c = this.checked ? '#f00' : '#09f';
    $('p').css('color', c);
});

-

Kullanarak On this.checked
Andy E : büyük yazma-up biz jQuery eğilimi aşırı nasıl yapmış bir elementin erişim özelliklerine jQuery üstün gücünü kullanarak . Makale özellikle kullanımını davranır .attr("id")ama durumda #checkbox olan bir <input type="checkbox" />eleman sorunu için aynıdır $(...).attr('checked')(hatta $(...).is(':checked')) vs. this.checked.


48

Bunu dene.

$('#checkbox').click(function(){
    if (this.checked) {
        $('p').css('color', '#0099ff')
    }
}) 

Bazen jquery'yi aşırız. Düz javascript ile jquery kullanılarak birçok şey başarılabilir.


34

"This.checked" her zaman "açık" olabilir. Bu nedenle şunları tavsiye ederim:

$('#checkbox').change(function() {
  if ($(this).is(':checked')) {
    console.log('Checked');
  } else {
    console.log('Unchecked');
  }
});

Benim durumumda, $(':checkbox')çalışmasını sağlamak için değiştirdim ;)
Pathros

21

farklı renkte bir sınıf tanımlarsanız, o zaman sınıfı değiştirirseniz

$('#checkbox').click(function(){
    var chk = $(this);
    $('p').toggleClass('selected', chk.attr('checked'));
}) 

bu şekilde kodunuz daha temizdir çünkü tüm css özelliklerini belirtmek zorunda değilsiniz (diyelim ki bir kenarlık, bir metin stili veya başka bir şey eklemek istiyorsunuz ...)


4
Genel çözüm için +1. Yapmak için hiçbir neden yoktur $('#checkbox').attr('checked')bunu biliyoruz eğer, ancak, #checkbox bir (, Kimlik ziyade yanıltıcıdır değilse) bir onay kutusu. this.checkedyapacağım.
jensgram

@jensgram @fcalderan +1 Bahşiş için teşekkürler! ToggleClass'ı hiç anahtarlı görmemiştim. Yararsız olduğu için gönderimi siliyorum. Bu kadar seçici olduğum için üzgünüm, ancak bu cevabın '#checkbox' iki kez seçilmeden% 100 mükemmel olacağını düşünüyorum: bunun yerine $ (this) kullanabilirsiniz? Veya jensgram'ın çözümü?
saldırı

@attack elbette kullanmadan önce elementinizi önbelleğe alabilirsiniz (şimdi koda bakın). this.checked $ (..]. attr ('işaretlendi') 'den bile daha hızlı

4

Bu onay kutusu sorununu ele almak için çılgın bir çözüm buldum burada kontrol edilmemiş veya kontrol edilmemiş benim algoritmam ... global bir değişken oluşturalım var check_holder diyelim

check_holder'ın 3 durumu vardır

  1. tanımlanmamış durum
  2. 0 eyalet
  3. 1 eyalet

Onay kutusu tıklanırsa,

$(document).on("click","#check",function(){
    if(typeof(check_holder)=="undefined"){
          //this means that it is the first time and the check is going to be checked
          //do something
          check_holder=1; //indicates that the is checked,it is in checked state
    }
    else if(check_holder==1){
          //do something when the check is going to be unchecked
          check_holder=0; //it means that it is not checked,it is in unchecked state
    }
     else if(check_holder==0){
            //do something when the check is going to be checked
            check_holder=1;//indicates that it is in a checked state
     }
});

Yukarıdaki kod, birçok durumda bir onay kutusunun işaretli olup olmadığını öğrenmek için kullanılabilir. Bunun arkasındaki konsept, onay kutusu durumlarını bir değişkene, yani açıkken, kapalıyken kaydetmektir. Umarım mantık sorununuzu çözmek için kullanılabilir.


1
Çözüm gerçekten çılgınca ama iyi bir şekilde değil. Evet, küresel değişkenler bugün bir sorunu çözmenize yardımcı olabilir, ancak yarın neredeyse kesinlikle sizin için bir sorun haline gelecektir. Mümkünse onlardan kaçınmaya çalışın, bu% 99'dur. Küresel durum hakkında endişelenmeden kodunuz hakkında mantık yürütmeyi imkansız hale getiriyorlar. Bir küresel değişken masum görünebilir, ancak hızla onlarca, sonra yüzlerce olur. Orada bulundum, bunu gördüm ve hiç hoş değil.
bijancn

3

Bu kodu kontrol edin:

<!-- script to check whether checkbox checked or not using prop function -->
<script>
$('#change_password').click(function(){
    if($(this).prop("checked") == true){ //can also use $(this).prop("checked") which will return a boolean.
        alert("checked");
    }
    else if($(this).prop("checked") == false){
        alert("Checkbox is unchecked.");
    }
});
</script>

1
$('#checkbox').change(function(){
   (this.checked)?$('p').css('color','#0099ff'):$('p').css('color','another_color');
});

1

Muhtemelen, onay kutusu işaretlendiğinde veya işaretlenmediğinde işlem yapmak için bu kodla gidebilirsiniz.

$('#chk').on('click',function(){
    if(this.checked==true){
      alert('yes');
    }else{
      alert('no');
    }
});


0

Optimal uygulama

$('#checkbox').on('change', function(){
    $('p').css('color', this.checked ? '#09f' : '');
});

gösteri

$('#checkbox').on('change', function(){
    $('p').css('color', this.checked ? '#09f' : '');
});
<script src="https://code.jquery.com/jquery-1.12.2.min.js"></script>
<input id="checkbox" type="checkbox" /> 
<p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
    eiusmod tempor incididunt ut labore et dolore magna aliqua.
</p>
<p>
    Ut enim ad minim veniam, quis nostrud exercitation ullamco
    laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure
    dolor in reprehenderit in voluptate velit esse cillum dolore eu
    fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
    proident, sunt in culpa qui officia deserunt mollit anim id est
    laborum.
</p>


0

Neden yerleşik olayları kullanmıyorsunuz?

$('#checkbox').click(function(e){
    if(e.target.checked) {
     // code to run if checked
        console.log('Checked');

     } else {

     //code to run if unchecked
        console.log('Unchecked');
     }
});
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.