Я хотел бы сделать что-то вроде этого, чтобы отметить checkbox
, используя jQuery :
$(".myCheckBox").checked(true);
Или
$(".myCheckBox").selected(true);
Существует ли такая вещь?
30 ответов
Современный jQuery
Используйте .prop()
:
$('.myCheckbox').prop('checked', true);
$('.myCheckbox').prop('checked', false);
DOM API
Если вы работаете только с одним элементом, вы всегда можете просто получить доступ к базовому {{ X0}} и измените его .checked
свойство:
$('.myCheckbox')[0].checked = true;
$('.myCheckbox')[0].checked = false;
Преимущество использования методов .prop()
и .attr()
вместо этого заключается в том, что они будут работать со всеми соответствующими элементами.
JQuery 1.5.x и ниже
Метод .prop()
недоступен, поэтому вам необходимо использовать .attr()
.
$('.myCheckbox').attr('checked', true);
$('.myCheckbox').attr('checked', false);
Обратите внимание, что это подход, используемый в модульных тестах jQuery. до версии 1.6 и предпочтительнее использования $('.myCheckbox').removeAttr('checked');
, поскольку последний, если флажок был изначально установлен, изменит поведение вызова на .reset()
в любой форме, которая его содержит, - незначительное, но, вероятно, нежелательное изменение поведения.
Для большего контекста некоторые неполные обсуждения изменений в обработке атрибута / свойства checked
при переходе с 1.5.x на 1.6 можно найти в заметки о выпуске версии 1.6 и раздел Атрибуты и свойства раздела .prop()
документация.
Это, наверное, самое короткое и простое решение:
$(".myCheckBox")[0].checked = true;
Или
$(".myCheckBox")[0].checked = false;
Еще короче было бы:
$(".myCheckBox")[0].checked = !0;
$(".myCheckBox")[0].checked = !1;
Здесь также находится jsFiddle .
Я скучаю по решению. Я всегда буду использовать:
if ($('#myCheckBox:checked').val() !== undefined)
{
//Checked
}
else
{
//Not checked
}
Когда вы отметили флажок, как;
$('.className').attr('checked', 'checked')
Этого может быть недостаточно. Вы также должны вызвать функцию ниже;
$('.className').prop('checked', 'true')
Особенно, когда вы удалили флажок отмеченный атрибут.
$('controlCheckBox').click(function(){
var temp = $(this).prop('checked');
$('controlledCheckBoxes').prop('checked', temp);
});
Другое возможное решение:
var c = $("#checkboxid");
if (c.is(":checked")) {
$('#checkboxid').prop('checked', false);
} else {
$('#checkboxid').prop('checked', true);
}
Попробуй это:
$('#checkboxid').get(0).checked = true; //For checking
$('#checkboxid').get(0).checked = false; //For unchecking
Ты можешь сделать
$('.myCheckbox').attr('checked',true) //Standards compliant
Или
$("form #mycheckbox").attr('checked', true)
Если у вас есть специальный код в событии onclick для флажка, который вы хотите включить, используйте этот вместо:
$("#mycheckbox").click();
Вы можете снять галочку, удалив атрибут полностью:
$('.myCheckbox').removeAttr('checked')
Вы можете установить все флажки следующим образом:
$(".myCheckbox").each(function(){
$("#mycheckbox").click()
});
Это выбирает элементы, которые имеют указанный атрибут со значением, содержащим данную подстроку "ckbItem":
$('input[name *= ckbItem]').prop('checked', true);
Он выберет все элементы, которые содержат ckbItem в своем атрибуте name.
Вот код для проверки и снятия отметки с помощью кнопки:
var set=1;
var unset=0;
jQuery( function() {
$( '.checkAll' ).live('click', function() {
$( '.cb-element' ).each(function () {
if(set==1){ $( '.cb-element' ).attr('checked', true) unset=0; }
if(set==0){ $( '.cb-element' ).attr('checked', false); unset=1; }
});
set=unset;
});
});
Обновление: здесь тот же блок кода, использующий более новый метод prop Jquery 1.6+, который заменяет attr:
var set=1;
var unset=0;
jQuery( function() {
$( '.checkAll' ).live('click', function() {
$( '.cb-element' ).each(function () {
if(set==1){ $( '.cb-element' ).prop('checked', true) unset=0; }
if(set==0){ $( '.cb-element' ).prop('checked', false); unset=1; }
});
set=unset;
});
});
Если вы используете PhoneGap разработку приложения, и у вас есть значение для кнопки, которую вы хотите отобразить мгновенно, не забудьте сделай это
$('span.ui-[controlname]',$('[id]')).text("the value");
Я обнаружил, что без пролета интерфейс не будет обновляться независимо от того, что вы делаете.
Чтобы проверить и снять
$('.myCheckbox').prop('checked', true);
$('.myCheckbox').prop('checked', false);
В jQuery,
if($("#checkboxId").is(':checked')){
alert("Checked");
}
Или
if($("#checkboxId").attr('checked')==true){
alert("Checked");
}
В JavaScript
if (document.getElementById("checkboxID").checked){
alert("Checked");
}
Простой JavaScript очень прост и намного меньше накладных расходов:
var elements = document.getElementsByClassName('myCheckBox');
for(var i = 0; i < elements.length; i++)
{
elements[i].checked = true;
}
Вот полный ответ используя jQuery
Я проверяю это и он работает на 100%: D
// when the button (select_unit_button) is clicked it returns all the checed checkboxes values
$("#select_unit_button").on("click", function(e){
var arr = [];
$(':checkbox:checked').each(function(i){
arr[i] = $(this).val(); // u can get id or anything else
});
//console.log(arr); // u can test it using this in google chrome
});
Я не мог заставить это работать, используя:
$("#cb").prop('checked', 'true');
$("#cb").prop('checked', 'false');
И true, и false установили бы флажок. Что сработало для меня:
$("#cb").prop('checked', 'true'); // For checking
$("#cb").prop('checked', ''); // For unchecking
Вот способ сделать это без JQuery
function addOrAttachListener(el, type, listener, useCapture) {
if (el.addEventListener) {
el.addEventListener(type, listener, useCapture);
} else if (el.attachEvent) {
el.attachEvent("on" + type, listener);
}
};
addOrAttachListener(window, "load", function() {
var cbElem = document.getElementById("cb");
var rcbElem = document.getElementById("rcb");
addOrAttachListener(cbElem, "click", function() {
rcbElem.checked = cbElem.checked;
}, false);
}, false);
<label>Click Me!
<input id="cb" type="checkbox" />
</label>
<label>Reflection:
<input id="rcb" type="checkbox" />
</label>
Как сказал @ livefree75:
jQuery 1.5.x и ниже
Вы также можете расширить объект $ .fn новыми методами:
(function($) {
$.fn.extend({
check : function() {
return this.filter(":radio, :checkbox").attr("checked", true);
},
uncheck : function() {
return this.filter(":radio, :checkbox").removeAttr("checked");
}
});
}(jQuery));
Но в новых версиях jQuery мы должны использовать что-то вроде этого:
jQuery 1.6 +
(function($) {
$.fn.extend({
check : function() {
return this.filter(":radio, :checkbox").prop("checked", true);
},
uncheck : function() {
return this.filter(":radio, :checkbox").prop("checked",false);
}
});
}(jQuery));
Тогда вы можете просто сделать:
$(":checkbox").check();
$(":checkbox").uncheck();
Знайте об утечках памяти в Internet Explorer до Internet Explorer 9, как Состояния документации jQuery:
В Internet Explorer до версии 9 использование .prop () для установки для свойства элемента DOM чего-либо, кроме простого примитивного значения (число, строка или логическое значение), может привести к утечкам памяти, если свойство не удалено (с помощью .removeProp ( )) до того, как элемент DOM будет удален из документа. Чтобы безопасно установить значения для объектов DOM без утечек памяти, используйте .data ().
Вот код и демонстрация того, как установить несколько флажков ...
http://jsfiddle.net/tamilmani/z8TTt/
$("#check").on("click", function () {
var chk = document.getElementById('check').checked;
var arr = document.getElementsByTagName("input");
if (chk) {
for (var i in arr) {
if (arr[i].name == 'check') arr[i].checked = true;
}
} else {
for (var i in arr) {
if (arr[i].name == 'check') arr[i].checked = false;
}
}
});
Это правильный способ проверки и снятия флажков с помощью jQuery, так как это кроссплатформенный стандарт, и будет разрешать перепосты формы.
$('.myCheckBox').each(function(){ this.checked = true; });
$('.myCheckBox').each(function(){ this.checked = false; });
Делая это, вы используете стандарты JavaScript для проверки и снятия флажков, поэтому любой браузер, который должным образом реализует свойство «флажок» элемента флажок, будет запускать этот код без нареканий. Это должно быть всеми основными браузерами, но я не могу протестировать предыдущий Internet Explorer 9.
Проблема (jQuery 1.6):
Как только пользователь нажимает на флажок, этот флажок перестает отвечать на изменения атрибута «флажок».
Вот пример атрибута checkbox, не выполняющего работу после того, как кто-то щелкнул флажок (это происходит в Chrome).
Решение .
Используя свойство JavaScript «флажок» в DOM элементах, мы можем решить проблему напрямую, вместо того, чтобы пытаться манипулировать DOM делать то, что мы хотим делать.
Этот плагин будет изменять свойство selected любых элементов, выбранных jQuery, и успешно устанавливать и снимать флажки при любых обстоятельствах. Таким образом, хотя это может показаться чрезмерным решением, оно улучшит пользовательский интерфейс вашего сайта и поможет предотвратить разочарование пользователей.
(function( $ ) {
$.fn.checked = function(value) {
if(value === true || value === false) {
// Set the value of the checkbox
$(this).each(function(){ this.checked = value; });
}
else if(value === undefined || value === 'toggle') {
// Toggle the checkbox
$(this).each(function(){ this.checked = !this.checked; });
}
return this;
};
})( jQuery );
В качестве альтернативы, если вы не хотите использовать плагин, вы можете использовать следующие фрагменты кода:
// Check
$(':checkbox').prop('checked', true);
// Un-check
$(':checkbox').prop('checked', false);
// Toggle
$(':checkbox').prop('checked', function (i, value) {
return !value;
});
Мы можем использовать elementObject
с jQuery для проверки атрибута:
$(objectElement).attr('checked');
Мы можем использовать это для всех версий jQuery без каких-либо ошибок.
Обновление: Jquery 1.6+ имеет новый метод поддержки, который заменяет attr, например:
$(objectElement).prop('checked');
Для jQuery 1.6+
$('.myCheckbox').prop('checked', true);
$('.myCheckbox').prop('checked', false);
Для jQuery 1.5.x и ниже
$('.myCheckbox').attr('checked', true);
$('.myCheckbox').attr('checked', false);
Проверить,
$('.myCheckbox').removeAttr('checked');
Предполагая, что вопрос ...
Как проверить, установлен ли флажок ПО ЗНАЧЕНИЮ?
Помните, что в типичном наборе флажков все входные теги имеют одинаковое имя, они отличаются атрибутом value
: для каждого входа набора нет идентификатора.
Ответ Сианя можно расширить с помощью более конкретного селектора , используя следующую строку кода:
$("input.myclass[name='myname'][value='the_value']").prop("checked", true);
Использование:
$(".myCheckbox").attr('checked', true); // Deprecated
$(".myCheckbox").prop('checked', true);
И если вы хотите проверить, установлен ли флажок или нет:
$('.myCheckbox').is(':checked');
Чтобы установить флажок, вы должны использовать
$('.myCheckbox').attr('checked',true);
Или
$('.myCheckbox').attr('checked','checked');
И чтобы снять флажок, вы всегда должны установить его в false:
$('.myCheckbox').attr('checked',false);
Если вы делаете
$('.myCheckbox').removeAttr('checked')
Он удаляет атрибут все вместе, и поэтому вы не сможете сбросить форму.
BAD DEMO jQuery 1.6. Я думаю, что это сломано. Для 1.6 я собираюсь сделать новый пост об этом.
NEW WORKING DEMO jQuery 1.5.2 работает в Chrome.
Обе демонстрации используют
$('#tc').click(function() {
if ( $('#myCheckbox').attr('checked')) {
$('#myCheckbox').attr('checked', false);
} else {
$('#myCheckbox').attr('checked', 'checked');
}
});
Если вы используете мобильный телефон, и вы хотите, чтобы интерфейс обновлялся и отображал флажок как непроверенный, используйте следующее:
$("#checkbox1").prop('checked', false).checkboxradio("refresh");
Чтобы установить флажок с помощью jQuery 1.6 или выше, просто сделайте следующее:
checkbox.prop('checked', true);
Чтобы снять отметку, используйте:
checkbox.prop('checked', false);
Вот что мне нравится использовать для переключения флажка с помощью jQuery:
checkbox.prop('checked', !checkbox.prop('checked'));
Если вы используете jQuery 1.5 или ниже:
checkbox.attr('checked', true);
Чтобы снять отметку, используйте:
checkbox.attr('checked', false);
$("#mycheckbox")[0].checked = true;
$("#mycheckbox").attr('checked', true);
$("#mycheckbox").click();
Последний вызовет событие click для флажка, остальные - нет. Поэтому, если у вас есть специальный код в событии onclick для флажка, который вы хотите включить, используйте последний.
Вы также можете расширить объект $ .fn новыми методами:
(function($) {
$.fn.extend({
check : function() {
return this.filter(":radio, :checkbox").attr("checked", true);
},
uncheck : function() {
return this.filter(":radio, :checkbox").removeAttr("checked");
}
});
}(jQuery));
Тогда вы можете просто сделать:
$(":checkbox").check();
$(":checkbox").uncheck();
Или вы можете дать им более уникальные имена, такие как mycheck () и myuncheck (), если вы используете какую-то другую библиотеку, которая использует эти имена.
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.