Onay Kutularını aç / kapat


397

Şunlara sahibim:

$(document).ready(function()
{
    $("#select-all-teammembers").click(function() {
        $("input[name=recipients\\[\\]]").attr('checked', true);
    });                 
});

id="select-all-teammembers"Tıklandığında, işaretli ve işaretsiz arasında geçiş yapmak istiyorum . Fikirler? düzinelerce kod satırı değil mi?

Yanıtlar:


723

Yazabilirsin:

$(document).ready(function() {
    $("#select-all-teammembers").click(function() {
        var checkBoxes = $("input[name=recipients\\[\\]]");
        checkBoxes.prop("checked", !checkBoxes.prop("checked"));
    });                 
});

JQuery 1.6'dan önce, sadece attr () vardı ve prop () olmadığında şunu yazardık :

checkBoxes.attr("checked", !checkBoxes.attr("checked"));

Ancak "boolean" HTML özelliklerine uygulandığından prop()daha iyi anlambilime sahiptir attr(), bu nedenle genellikle bu durumda tercih edilir.


4
Bu, birincisinin durumunu temel aldığından karışıklaşabilir (böylece kullanıcı ilkini kontrol ederse, ardından geçişi kullanırsa, senkronizasyondan çıkacaktır). Listedeki ilk onay kutusunu değil, durumu iki durumlu düğmenin dışına dayandıracak şekilde hafifçe ayarlandı: $ ("input [name = alıcılar \ [\]]"). Prop ("işaretli", $ (this) .prop (" kontrol"));
— CookiesForDevo

6
'Prop' kullanmak bu işlemi Zepto için de yapar. Aksi takdirde kutuyu işaretler, ancak işaretini kaldırmaz.
— SimplGy

1
"attr" yerine "prop" hile yaptı: "attr" ile bir süre geçiş yapar ve sonra durur, yerine "prop" ile beklendiği gibi geçiş yapar. Güncelleme için +1.
— TechNyquist

11
$('input[type=checkbox]').trigger('click');Aşağıdaki @ 2astalavista tarafından bahsedilen daha özlüdür ve aynı zamanda "değişim" olayını tetikler.
— burada

1
@ CookiesForDevo'nun cevabını desteklemek için cevabınızı düzenleyebilir misiniz
— acquayefrank

213
//this toggles the checkbox, and fires its event if it has    

$('input[type=checkbox]').trigger('click'); 
//or
$('input[type=checkbox]').click(); 

Krom 29'da çalışıyor ancak FF 17.0.7'de çalışmıyor, biri bunu doğrulayabilir mi?
— Griddo

Uzun süredir mülk değiştirme rotasına gidiyordum. Benim için bu, onay kutusu öğelerini kontrol etmek ve işaretlerini kaldırmak için harika ve daha esnek bir yaklaşımdır.
— Isioma Nnodum

İstenmeyen olay tetiklenir.
— Jehong Ahn

Onay kutuları için, bir etikete tıklayarak değiştirilebileceği için genellikle 'değiştir' olayının başlatılması daha önerilir.
— Peter Lenjo

61

Bu eski olduğunu biliyorum ama soru ki biraz belirsiz olmasına geçiş her onay kutusu devlet geçiş gerektiği anlamına gelebilir, o her ne ise. 3 işaretli ve 2 işaretlenmemişse, geçiş yapmak ilk 3'ün işaretlenmemesini ve son 2 denetlenmesini sağlar.

Bunun için, buradaki çözümlerin hiçbiri, her onay kutusunun durumunu değiştirmek yerine tüm onay kutularının aynı duruma sahip olmasını sağladığından işe yaramaz. $(':checkbox').prop('checked')Birçok onay kutusunun yapılması , tüm .checkedikili özellikler arasındaki mantıksal AND değerini döndürür , yani bunlardan biri işaretlenmezse, döndürülen değer olur false.

.each()Her bir onay kutusu durumunu gerçekten eşit yapmak yerine değiştirmek istiyorsanız kullanmanız gerekir , örn.

   $(':checkbox').each(function () { this.checked = !this.checked; });

Özellik tüm tarayıcılarda bulunduğundan $(this)işleyicinin içinde ihtiyacınız olmadığını unutmayın .checked.


5
Evet, bu tüm onay kutularının durumunu değiştirmek için doğru cevap!
— Sydwell

1
Çok sayıda onay kutunuz olduğunda jQuery ile tıklamayı tetiklemekten daha hızlı büyüklük siparişleri.
— Jeremy Cook

16

İşte istediğiniz başka bir yol.

$(document).ready(function(){   
    $('#checkp').toggle(
        function () { 
            $('.check').attr('Checked','Checked'); 
        },
        function () { 
            $('.check').removeAttr('Checked'); 
        }
    );
});

9
Bu geçiş değil.
— AgentFire

2
@kst - Bu daha iyi bir yöntem $ ('input [name = alıcılar \ [\]]'). toggle (this.checked); Dersleri unutun.
— Davis

11

Sadece bir tıklamayı tetiklemenin daha kolay olduğunu düşünüyorum:

$("#select-all-teammembers").click(function() {
    $("input[name=recipients\\[\\]]").trigger('click');
});                 

9

Aklıma gelen en iyi yol.

$('#selectAll').change(function () {
    $('.reportCheckbox').prop('checked', this.checked);
});

veya

$checkBoxes = $(".checkBoxes");
$("#checkAll").change(function (e) {
    $checkBoxes.prop("checked", this.checked);
});   

veya

<input onchange="toggleAll(this)">
function toggleAll(sender) {
    $(".checkBoxes").prop("checked", sender.checked);
}

8

JQuery 1.6'dan bu yana .prop(function), bulunan her öğenin işaretli durumunu değiştirmek için kullanabilirsiniz :

$("input[name=recipients\\[\\]]").prop('checked', function(_, checked) {
    return !checked;
});

Mükemmel cevap. İlk alt çizgiyi alt çizgiden geçirme hakkında daha fazla şey biliyor musunuz? Bununla ilgili daha fazla bilgiyi nereden alabilirim?
— user1477388

1
Düzenleme: Görünüşe göre, aslında null stackoverflow.com/questions/11406823/…
— user1477388

8

Bu eklentiyi kullanın:

$.fn.toggleCheck  =function() {
       if(this.tagName === 'INPUT') {
           $(this).prop('checked', !($(this).is(':checked')));
       }

   }

Sonra

$('#myCheckBox').toggleCheck();

2

Onay kutusunu değiştirmesi gereken bir resim olduğunu varsayarsak, bu benim için çalışıyor

<img src="something.gif" onclick="$('#checkboxid').prop('checked', !($('#checkboxid').is(':checked')));">
<input type="checkbox" id="checkboxid">

4
Bu sizin ilk cevabınız olduğundan, soruda kullanılan posterin izlenmesinin en iyisi olduğunu fark edin - jQuery kodunu işaretleme sırasında satır içi değil, belgeye hazır işleyiciye koymak gibi. Bunu YAPMAMAK için bir nedeniniz varsa, nedenine ilişkin açıklama ekleyin.
— Mark Schultheiss

2

Check-all onay kutusunun kendisi belirli koşullar altında güncellenmelidir . Tıklayın çalış '# seçmek Tüm-teammembers' sonra seçimi kaldırmaları birkaç öğe seçin-hepsi tekrar tıklayın. Tutarsızlığı görebilirsiniz. Bunu önlemek için aşağıdaki numarayı kullanın:

  var checkBoxes = $('input[name=recipients\\[\\]]');
  $('#select-all-teammembers').click(function() {
    checkBoxes.prop("checked", !checkBoxes.prop("checked"));
    $(this).prop("checked", checkBoxes.is(':checked'));
  }); 

BTW DOM onay kutusundaki tüm onay kutuları yukarıda açıklandığı gibi önbelleğe alınmalıdır.


2

Html5 ve etiketleri olan bir onay kutusunu seçmek zorunda kalmadan onay kutularını değiştirmenin jQuery yolu:

 <div class="checkbox-list margin-auto">
    <label class="">Compare to Last Year</label><br>
    <label class="normal" for="01">
       <input id="01" type="checkbox" name="VIEW" value="01"> Retail units
    </label>
    <label class="normal" for="02">
          <input id="02" type="checkbox" name="VIEW" value="02">  Retail Dollars
    </label>
    <label class="normal" for="03">
          <input id="03" type="checkbox" name="VIEW" value="03">  GP Dollars
    </label>
    <label class="normal" for="04">
          <input id="04" type="checkbox" name="VIEW" value="04">  GP Percent
    </label>
</div>

  $("input[name='VIEW']:checkbox").change(function() {
    if($(this).is(':checked')) {  
         $("input[name='VIEW']:checkbox").prop("checked", false);
     $("input[name='VIEW']:checkbox").parent('.normal').removeClass("checked");
         $(this).prop("checked", true);
         $(this).parent('.normal').addClass('checked');
    }
    else{
         $("input[name='VIEW']").prop("checked", false);
         $("input[name='VIEW']").parent('.normal').removeClass('checked');
    }    
});

http://www.bootply.com/A4h6kAPshx


1

her kutuyu ayrı ayrı değiştirmek istiyorsanız (veya yalnızca bir kutu da çalışır):

Farklı şeyler olmasını istiyorsanız kolayca değiştirilebildiği ve yine de nispeten kısa ve okunması kolay olduğu için .each () yöntemini kullanmanızı öneririm.

Örneğin :

// toggle all checkboxes, not all at once but toggle each one for its own checked state:
$('input[type="checkbox"]').each(function(){ this.checked = ! this.checked });

// check al even boxes, uncheck all odd boxes:
$('input[type="checkbox"]').each(function(i,cb){ cb.checked = (i%2 == 0); });

// set all to checked = x and only trigger change if it actually changed:
x = true;
$('input[type="checkbox"]').each(function(){
    if(this.checked != x){ this.checked = x; $(this).change();}  
});

yan notta ... neden herkesin kontrol etmek için .attr () veya .prop () kullandığından emin değilim.

bildiğim kadarıyla element.checked tüm tarayıcılarda hep aynı şekilde çalıştı mı?


1
jQuery("#checker").click(function(){
    jQuery("#mydiv :checkbox").each(function(){
        this.checked = true;
    });
});
jQuery("#dechecker").click(function(){
    jQuery("#mydiv :checkbox").each(function(){
        this.checked = false;
    });
});
jQuery("#checktoggler").click(function(){
    jQuery("#mydiv :checkbox").each(function(){
        this.checked = !this.checked;
    });
});

;)


1

Bu şekilde de yazabilirsiniz

$(function() {
    $("#checkbox-toggle").click(function() {
        $('input[type=checkbox][name=checkbox_id\\[\\]]').click();
    });
});

Kullanıcı '# checkbox-toggle' kimliğine sahip düğmeyi tıkladığında onay kutusunun click olayını çağırmanız yeterlidir.


1

Daha iyi bir yaklaşım ve UX

$('.checkall').on('click', function() {
   var $checks  = $('checks');
   var $ckall = $(this);

    $.each($checks, function(){
        $(this).prop("checked", $ckall.prop('checked'));
    });
});

$('checks').on('click', function(e){
   $('.checkall').prop('checked', false);
});

1
<table class="table table-datatable table-bordered table-condensed table-striped table-hover table-responsive">
<thead>
    <tr>
        <th class="col-xs-1"><a class="select_all btn btn-xs btn-info"> Select All </a></th>
        <th class="col-xs-2">#ID</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td><input type="checkbox" name="order333"/></td>
        <td>{{ order.id }}</td>
    </tr>
    <tr>
        <td><input type="checkbox" name="order334"/></td>
        <td>{{ order.id }}</td>
    </tr>
</tbody>                  
</table>

Deneyin:

$(".table-datatable .select_all").on('click', function () {
    $("input[name^='order']").prop('checked', function (i, val) {
        return !val;
    });
});

1

Bu benim için çok iyi çalışıyor.

   $("#checkall").click(function() {
       var fruits = $("input[name=fruits\\[\\]]");
        fruits.prop("checked", $(this).prop("checked"));
    });

1
"işaretli" özelliğe zaten sahip olduğu değerin aynısını verdiğinizin farkındasınız, değil mi? biraz utanç verici değil mi? Açıkçası daha !önce bir işaret koymak istedim ..
— vsync

1

Bunun en temel örneği:

// get DOM elements
var checkbox = document.querySelector('input'),
    button = document.querySelector('button');

// bind "cilck" event on the button
button.addEventListener('click', toggleCheckbox);

// when clicking the button, toggle the checkbox
function toggleCheckbox(){
  checkbox.checked = !checkbox.checked;
};
<input type="checkbox">
<button>Toggle checkbox</button>


1

basitçe bunu kullanabilirsin

$("#chkAll").on("click",function(){
    $("input[name=checkBoxName]").prop("checked",$(this).prop("checked"));
});

0

Benim tahminime göre, normal varyantı öneren en doğru adam GigolNet Gigolashvili'dir, ancak daha güzel bir varyantı önermek istiyorum. Kontrol et

$(document).on('click', '.fieldWrapper > label', function(event) {
    event.preventDefault()
    var n = $( event.target ).parent().find('input:checked').length
    var m = $( event.target ).parent().find('input').length
    x = n==m? false:true
    $( event.target ).parent().find('input').each(function (ind, el) {
        // $(el).attr('checked', 'checked');
        this.checked = x
    })
})

0

Sırasıyla doğru veya yanlış yerine 'işaretli' veya null olarak ayar yapmak işi yapar.

// checkbox selection
var $chk=$(':checkbox');
$chk.prop('checked',$chk.is(':checked') ? null:'checked');

0

Bu kod, web şablonlarında kullanılan herhangi bir geçiş anahtarı animatörünü tıklattığınızda onay kutusunu değiştirir. Kodunuzda ".onoffswitch-label" ifadesini değiştirin. "checkboxID", burada değiştirilen onay kutusudur.

$('.onoffswitch-label').click(function () {
if ($('#checkboxID').prop('checked')) 
 {
   $('#checkboxID').prop('checked', false);
 }
else 
 {
   $('#checkboxID').prop('checked', true);
 }
});

-3

Daha kolay bir yol var

İlk önce onay kutularınıza 'id_chk' sınıfı örneği verin

Sonra 'id_chk' onay kutularının durumunu koyacağınız onay kutusunun içinde:

<input type='checkbox' onchange='js:jQuery(".id_chk").prop("checked", jQuery(this).prop("checked"))' />

Hepsi bu, umarım bu yardımcı olur

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.