jQuery, herhangi bir onay kutusunun seçili olup olmadığına bakın


126

Tek bir onay kutusunun seçilip seçilmediğini nasıl göreceğimi biliyorum.

Ancak aşağıdakilerle ilgili sorun yaşıyorum - bir form kimliği verildiğinde , onay kutularından herhangi birinin seçilip seçilmediğini (yani 1 veya daha fazla) ve hiçbirinin seçilip seçilmediğini görmem gerekiyor . Temel olarak bu iki soruyu yanıtlayan iki ayrı işleve ihtiyacım var. Yardım takdir edilecektir. Teşekkürler!

Aslında, hiçbirinin seçilmediğini bana söyleyecek bir işleve ihtiyacım var . Bunu bilmek diğer soruya cevap verecektir.


Yanıtlar:


246

Bunun gibi bir şey kullanabilirsin

if ($("#formID input:checkbox:checked").length > 0)
{
    // any one is checked
}
else
{
   // none is checked
}

8
$("#formID input:checkbox:checked").lengthburada da yeterli olacaktır
Damon

@Damon Sanırım if ($("#formID input:checkbox:checked").length){}(olmadan >0) yeterli olacaktır, çünkü 0 yanlış
Adrien

11
jQuery, :checkboxseçici ile ilgili olarak şunları söylüyor :,For better performance in modern browsers, use [type="checkbox"] bkz. api.jquery.com/checkbox-selector - radiobuttons için aynı btw, use [type="radio"] rather than :radio api.jquery.com/radio-selector
Adrien Be

27

JQuery .is, belirtilen tüm öğeleri test edecek ve bunlardan en az biri selector ile eşleşirse true döndürür:

if ($(":checkbox[name='choices']", form).is(":checked"))
{
    // one or more checked
}
else
{
    // nothing checked
}

Her ne is()kadar işe yarıyor gibi görünse de, :checked@ rahul'un cevabında belirtildiği gibi doğrudan seçicide olması daha uygun görünüyor. is (), "geri aramalar içinde" olduğunda daha kullanışlı görünüyor, bkz. api.jquery.com/is . Yoksa bir şey mi kaçırıyorum?
Adrien Be

Hayır, hemen hemen dokümanlarda yazılan şeydir - bir öğenin belirtilen öznitelikle eşleşip eşleşmediğini kontrol edersiniz. Bunu filtre olarak uygulamak ve ardından sonuçta en az bir öğe alıp almadığınızı kontrol etmek aynıdır ancak imo daha uzun ve çok anlamlı değildir.
Michael Logutov

.is(":checked")Çözümünüzde daha anlamlı olduğu için +1 , gerisi hakkında emin değilsiniz.
Adrien Be

Yani $("form input[type=checkbox]").is(":checked")daha basit ve daha genel bir yaklaşım olabilir.
Adrien Be

@AdrienBe Kullanmak isdaha iyi bir performans olabilir, çünkü birini bulur bulmaz durur.
ChrisW

8

Bunu yapabilirsiniz:

  if ($('#form_id :checkbox:checked').length > 0){
    // one or more checkboxes are checked
  }
  else{
   // no checkboxes are checked
  }

Nerede:

  • :checkbox filtre seçici, tüm onay kutusunu seçer.
  • :checked işaretli onay kutularını seçecek
  • length orada kontrol edilenlerin sayısını verecek

jQuery, :checkboxseçici hakkında şunları söylüyor :,For better performance in modern browsers, use [type="checkbox"] bkz. api.jquery.com/checkbox-selector
Adrien Be

6

Onay kutuları listesindeki herhangi bir onay kutusunun değişip değişmediğini kontrol etmek için kullandım:

$('input[type="checkbox"]').change(function(){ 

        var itemName = $('select option:selected').text();  

         //Do something.

});     

6

'Uzunluk' kullanmadan bunu şu şekilde yapabilirsiniz:

if ($('input[type=checkbox]').is(":checked")) {
      //any one is checked
}
else {
//none is checked
}

3

.lengthBuradan basit bir dönüş yapabilirsiniz :

function areAnyChecked(formID) {
  return !!$('#'+formID+' input[type=checkbox]:checked').length;
}

Bu, verilen formdaki onay kutularını arar, var mı diye bakar :checkedve trueeğer varsa döndürür (aksi takdirde uzunluk 0 olacaktır). Biraz daha net hale getirmek için, işte boole olmayan dönüştürülmüş sürüm:

function howManyAreChecked(formID) {
  return $('#'+formID+' input[type=checkbox]:checked').length;
}

Bu, kaç tanesinin kontrol edildiğini gösterir.


3

Rahul'un cevabı, sorunuza en uygun olanıdır. Her neyse, işaretlenecek bir grup onay kutunuz varsa ve formunuzdaki tüm onay kutularına sahip değilseniz, bunun için gidebilirsiniz.

Örneğin, bir sınıf adı gibi kontrol etmek istediğiniz tüm onay kutuları için bir sınıf adı girin test_checkve şimdi gruba ait herhangi bir onay kutusunun işaretlenip işaretlenmediğini şu şekilde kontrol edebilirsiniz:

$("#formID .test_check:checked").length > 0

O dönerse true, bir veya birden fazla onay kutularını sınıfadı sahip kontrol edilir varsayalım test_checkve hiçbiri dönüşleri ise kontrol false.

Umarım birine yardımcı olur. Teşekkürler :)-


1

Bu sorunu çözmenin en iyi yolu budur.

  if($("#checkbox").is(":checked")){

  // Do something here /////

  };

Hey, StackOverflow'a hoş geldiniz. Sorunu çözmek için neden "en iyi yol" olduğu açık olmadığı için cevabınızı biraz daha açıklayabilirsiniz.
dddJewelsbbb
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.