Отримати значення прапорець?


177

Отже, у мене є такий код, який виглядає приблизно так:

<input class="messageCheckbox" type="checkbox" value="3" name="mailId[]">
<input class="messageCheckbox" type="checkbox" value="1" name="mailId[]">

Мені просто потрібен Javascript, щоб отримати значення того, що прапорець в даний момент встановлений.

РЕДАКТУВАННЯ : Щоб додати, буде встановлено лише ОДНЕ поле.


1
Вам потрібен код JavaScript або jQuery?
Андрій Воробйов

6
Чому б не скористатися перемикачем?
PraveenVenu

Тому що я пишу плагін для сайту
Метью "обов'язковий" Брайант

Якщо вам потрібен лише один прапорець, чому б вам не скористатися перемикачами? це більш підходящий компонент інтерфейсу для цієї роботи.
Тал Ярон

@TalYaron Чи можете ви скасувати вибір радіо кнопок? Думаю, не без js-коду. Можливо, ОП хочуть легко зняти прапорець.
R3tep

Відповіді:


256

Для сучасних браузерів :

var checkedValue = document.querySelector('.messageCheckbox:checked').value;

ВикористовуючиjQuery :

var checkedValue = $('.messageCheckbox:checked').val();

Чистий javascript безjQuery :

var checkedValue = null; 
var inputElements = document.getElementsByClassName('messageCheckbox');
for(var i=0; inputElements[i]; ++i){
      if(inputElements[i].checked){
           checkedValue = inputElements[i].value;
           break;
      }
}

9
@Mageek - це неправильна практика додавання однакового ідентифікатора на декілька елементів.
Інженер

@Engineer Ні, просто поставте інший ідентифікатор для кожного прапорця.
Mageek

3
@Engineer "Збереження байтів", тому що ми повинні просто написати document.getElementById("foo").value();і "зберегти обчислення", оскільки getElementByIdце, безумовно, швидше, ніж getElementsByTagNameі цикл.
Mageek

9
для jQuery .is(":checked")- це правильний спосіб, оскільки .val()поверне значення атрибута, якщо його визначено .. і навіть якщо його не визначено, воно повернеться "увімкнено", а не булевим
Пітер,

1
document.querySelector('.messageCheckbox:checked').valueгенерує TypeError, якщо не встановлено прапорець
Майснер

262

Ніщо з перерахованого вище не працювало для мене, але просто використовуйте це:

document.querySelector('.messageCheckbox').checked;

Щасливе кодування.


Я погоджуюсь. Ви підтвердили те, що я думав. Мені подобається ставити var chk1 = document.getElementById ('messageCheckbox'); Таким чином я можу посилатися на властивості змінної "chk1": перевірено, увімкнено, стиль тощо
JustJohn

4
Де ти це взяв id? Чи можете ви поясніть, будь ласка? Хлопець, який задав запитання, використовував classнасправді. Буде добре, якщо ви зможете надати повний код, щоб я міг зрозуміти, звідки у васid
devfaysal

3
Це не може працювати з прикладом коду, який надає ОП ... Мені цікаво, чому у нього так багато оновлень, не відповідаючи на питання, хоча швидке виправлення може зробити це правильним.
Лоран С.

1
Чи можете ви відредагувати запропоновану відповідь, щоб розширити, що це робить і як вона стосується ОП?
Ro Yo Mi

2
@PradeepKumarPrabaharan, напевно, такі люди, як я (не використовують ідентифікатор для декількох предметів), цікавляться, чому .value надає їм невизначеність.

111

Я використовую це у своєму коді. Спробуйте це

var x=$("#checkbox").is(":checked");

Якщо прапорець прапорець xбуде істинним, інакше буде помилковим.


7
Це не дає відповіді на запитання, але можна використовувати для визначення того, чи встановлено прапорець. +1, оскільки це все ще допомогло мені.
Кевін Юрковський

5
Не відповідає на питання, але саме те, що я шукав.
пн

Корисно, коли #checkboxце змінна, наприклад myCheckbox.
Optimae

15

у звичайному javascript:

function test() {
    var cboxes = document.getElementsByName('mailId[]');
    var len = cboxes.length;
    for (var i=0; i<len; i++) {
        alert(i + (cboxes[i].checked?' checked ':' unchecked ') + cboxes[i].value);
    }
}
function selectOnlyOne(current_clicked) {
    var cboxes = document.getElementsByName('mailId[]');
    var len = cboxes.length;
    for (var i=0; i<len; i++) {
        cboxes[i].checked = (cboxes[i] == current);
    }
}

4

$(document).ready(function() {
  var ckbox = $("input[name='ips']");
  var chkId = '';
  $('input').on('click', function() {
    
    if (ckbox.is(':checked')) {
      $("input[name='ips']:checked").each ( function() {
   			chkId = $(this).val() + ",";
        chkId = chkId.slice(0, -1);
 	  });
       
       alert ( $(this).val() ); // return all values of checkboxes checked
       alert(chkId); // return value of checkbox checked
    }     
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="checkbox" name="ips" value="12520">
<input type="checkbox" name="ips" value="12521">
<input type="checkbox" name="ips" value="12522">


4

Це не відповідає безпосередньо на питання, але може допомогти майбутнім відвідувачам.


Якщо ви хочете, щоб змінна завжди була поточним станом прапорця (замість того, щоб постійно перевіряти її стан), ви можете змінити onchangeподію, щоб встановити цю змінну.

Це можна зробити в HTML:

<input class='messageCheckbox' type='checkbox' onchange='some_var=this.checked;'>

або з JavaScript:

cb = document.getElementsByClassName('messageCheckbox')[0]
cb.addEventListener('change', function(){some_var = this.checked})

2

Використовуй це:

alert($(".messageCheckbox").is(":checked").val())

Це передбачає, що прапорці повинні мати клас "messageCheckbox", інакше вам доведеться зробити перевірку, якщо вхід є типом прапорця тощо.


2
<input class="messageCheckbox" type="checkbox" onchange="getValue(this.value)" value="3" name="mailId[]">

<input class="messageCheckbox" type="checkbox" onchange="getValue(this.value)" value="1" name="mailId[]">
function getValue(value){
    alert(value);
}

0

Якщо ви використовуєте Semantic UI React , dataпередається як другий параметр onChangeподії.

Тому ви можете отримати доступ до checkedресурсу таким чином:

<Checkbox label="Conference" onChange={(e, d) => console.log(d.checked)} />

0

Жодне з перерахованого вище не працювало для мене, не кидаючи помилок у консоль, коли прапорець не встановлений, тому я щось робив по цих рядках (onclick та функція прапорця використовуються лише для демонстраційних цілей, у моєму випадку це частина набагато більша функція подання форми):

function checkbox() {
  var checked = false;
  if (document.querySelector('#opt1:checked')) {
     checked = true;
  }
  document.getElementById('msg').innerText = checked;
}
<input type="checkbox" onclick="checkbox()" id="opt1"> <span id="msg">Click The Box</span>


-3

У своєму проекті я зазвичай використовую такі фрагменти:

var type[];
$("input[name='messageCheckbox']:checked").each(function (i) {
                type[i] = $(this).val();
            });

І це працює добре. З повагою.


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