JQuery проверить, если вход является флажок типа?


151

Я хотел бы узнать, является ли ввод флажком или нет, и следующее не работает:

$("#myinput").attr('checked') === undefined

Спасибо еще раз!

Ответы:


333

Вы можете использовать псевдо-селектор :checkboxпри вызове isфункции jQuery :

$('#myinput').is(':checkbox')

1
Это метод, который я всегда использую.
Topher Fangio

Вы действительно не можете стать проще, чем это.
КайлФаррис

9
Зачем использовать двигатель селектора для этого? Это совершенно не нужно.
Тим Даун

7
@ Вниз Я понимаю, что могут быть более эффективные способы сделать то же самое. Я предполагаю, что мне нравится эта версия, потому что код очень удобочитаемый.
Кен Браунинг

2
@KenBrowning: Достаточно справедливо. Я был довольно против jQuery в 2009 году, особенно в отношении SO, слепо использующего jQuery для всего; с тех пор мои взгляды немного смягчились, и я бы отменил свое отрицательное мнение, если бы это было возможно. Тем не менее, я все еще думаю, что у меня была точка. Альтернатива (которую я не могу отрицать, более многословна):var myInput = $("myinput")[0]; var isCheckbox = myInput.nodeName.toLowerCase() == "input" && myInput.type == "checkbox";
Тим Даун

22
>>> a=$("#communitymode")[0]
<input id="communitymode" type="checkbox" name="communitymode">
>>> a.type
"checkbox"

Или больше в стиле jQuery:

$("#myinput").attr('type') == 'checkbox'

Совершенно верно. Не самое простое.
КайлФаррис

6
Это экономит с помощью механизма выбора jQuery, использование которого здесь совершенно неуместно. Первый вариант намного лучше, поскольку позволяет избежать любой путаницы в jQuery attr().
Тим Даун

3
Вниз @ Тим правильно - вы должны изменить , attr()чтобы prop(), AFAIK. attr()не всегда получает «реальное» значение атрибута (т.е. проверено или нет) из браузера. Честно говоря, не уверен, почему это так, но я узнал об этом некоторое время назад.
thekingoftruth

1
В Chome ваш второй пример чувствителен к регистру: jsfiddle.net/gtza0uuL . Это не с .prop, но я не знаю, можно ли это гарантировать. Примечание: вы не можете просто сделать .toLowerCase (), потому что «тип» может быть неопределенным.
xr280xr


6

Решение без jQuery очень похоже на решение jQuery:

document.querySelector('#myinput').getAttribute('type') === 'checkbox'

2

Используйте эту функцию:

function is_checkbox(selector) {
    var $result = $(selector);
    return $result[0] && $result[0].type === 'checkbox';
};

Или этот плагин jquery:

$.fn.is_checkbox = function () { return this.is(':checkbox'); };

0
$('#myinput').is(':checkbox')

Это единственная работа, чтобы решить проблему, чтобы определить, установлен флажок или нет. Он возвращает true или false, я ищу его часами и пробую все, теперь его работа проясняется. Я использую EDG в качестве браузера и W2UI.


Не забывайте использовать рефакторинг кода, когда вставляете код в свои вопросы и ответы.
Андрес Фелипе
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.