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.