jQuery перевірте, чи встановлені прапорці будь-яких чи ні


126

Я знаю, як перевірити, вибрано чи ні окремий прапорець.

Але у мене виникають проблеми із наступним - з урахуванням ідентифікатора форми мені потрібно побачити, чи вибрано якесь із прапорців (тобто 1 або більше), і мені потрібно побачити, чи не вибрано жодне . В основному мені потрібні дві окремі функції, які відповідають на ці два питання. Допомога буде вдячна. Дякую!

Насправді мені просто потрібна функція, яка б повідомила мені, чи не вибрано жодного . Знаючи це, відповів би на інше питання.


Відповіді:


246

Можна використовувати щось подібне

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

8
$("#formID input:checkbox:checked").lengthБуло б достатньо і тут
Деймон

@Damon Я думаю , ви мали в виду if ($("#formID input:checkbox:checked").length){}(без >0) буде досить , тому що 0 це значення falsey см james.padolsey.com/javascript/truthy-falsey
Adrien Be

11
jQuery говорить про :checkboxселектор: For better performance in modern browsers, use [type="checkbox"]див. api.jquery.com/checkbox-selector - те саме для use [type="radio"] rather than :radio радіо кнопок
Adrien Be

27

JQuery .isперевірить усі задані елементи та поверне true, якщо принаймні один з них відповідає селектору:

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

Althought is()здається на роботу, маючи :checkedбезпосередньо в селекторі , як зазначено в @ Рахул Відповімо здається більш відповідним. є () здається кориснішим, коли "всередині зворотних зворотних дзвінків ", див. api.jquery.com/is . Або я щось пропускаю?
Адріан Будь

Ні, це майже все, що написано в документах - ви перевіряєте, чи збігається елемент із заданим атрибутом. Застосовуючи його як фільтр, а потім перевіряти, чи отримуєте ви хоча б один предмет у результаті, це те саме, але більш довгий і не такий виразний.
Михайло Логутов

+1 за те, що .is(":checked")у вашому рішенні більш виразний, але не впевнений у решті.
Адріан Будь

А саме $("form input[type=checkbox]").is(":checked")може бути простіший і загальніший підхід.
Адріан Будь

@AdrienBe Використання isможе мати кращу ефективність, оскільки воно припиняється, як тільки він його знайде.
ChrisW

8

Ви можете зробити це:

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

Де:

  • :checkbox Селектор фільтрів встановлює всі прапорці.
  • :checked буде встановлено прапорці
  • length дасть кількість перевірених там

jQuery каже про :checkboxселектор: For better performance in modern browsers, use [type="checkbox"]див. api.jquery.com/checkbox-selector
Адріан Будь

6

Це те, що я використовував для перевірки, чи змінилися якісь прапорці у списку прапорців:

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

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

         //Do something.

});     

6

Без використання "довжини" ви можете це зробити так:

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

3

Ви можете зробити просте повернення .lengthтут:

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

Подивіться прапорці в даній формі, побачите, чи є такі, :checkedі повернеться, trueякщо вони є (оскільки довжина буде 0, інакше). Щоб зробити це трохи зрозуміліше, ось версія, що не перетворюється на бул:

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

Це поверне підрахунок кількості перевірених.


3

Відповідь Рахуля найкраще відповідає вашому запитанню. У будь-якому випадку, якщо у вас є група прапорців, яку потрібно перевірити, і не всі прапорці у вашій формі, ви можете перейти до цього.

Поставте ім'я класу для всіх прапорців, які ви хочете встановити, скажімо, наприклад, ім'я класу, test_checkі тепер ви можете перевірити, чи будь-який з прапорець встановлено, що належить до групи:

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

Якщо він повертається true, припустіть, що один або кілька прапорець встановлено з назвою класу, test_checkі немає, якщо повертається false.

Сподіваюся, це комусь допоможе. Дякую :)-


1

Це найкращий спосіб вирішити цю проблему.

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

  // Do something here /////

  };

Привіт, ласкаво просимо до StackOverflow. Можливо, ви можете трохи більше описати свою відповідь, оскільки не очевидно, чому це "найкращий спосіб" вирішити проблему.
dddJewelsbbb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.