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

151

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

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

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

Rio
источник

Ответы:

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.

Code.king
источник
Не забывайте использовать рефакторинг кода, когда вставляете код в свои вопросы и ответы.
Андрес Фелипе