Я хотел бы сделать что-то вроде этого, чтобы отметить checkbox
использование jQuery :
$(".myCheckBox").checked(true);
или
$(".myCheckBox").selected(true);
Существует ли такая вещь?
$("#mycheckbox").click();
Я хотел бы сделать что-то вроде этого, чтобы отметить checkbox
использование jQuery :
$(".myCheckBox").checked(true);
или
$(".myCheckBox").selected(true);
Существует ли такая вещь?
$("#mycheckbox").click();
Ответы:
Используйте .prop()
:
$('.myCheckbox').prop('checked', true);
$('.myCheckbox').prop('checked', false);
Если вы работаете только с одним элементом, вы всегда можете просто получить доступ к базовому элементу HTMLInputElement
и изменить его .checked
свойство:
$('.myCheckbox')[0].checked = true;
$('.myCheckbox')[0].checked = false;
Выгода для использования .prop()
и .attr()
методов вместо этого является то , что они будут работать на все соответствующие элементы.
.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()
документации .
DOMElement.checked = true
». Но это было бы незначительным, потому что это только один элемент ...
$(element).prop('checked')
это полная трата текста. element.checked
существует и должен использоваться в тех случаях, когда у вас уже естьelement
Использование:
$(".myCheckbox").attr('checked', true); // Deprecated
$(".myCheckbox").prop('checked', true);
И если вы хотите проверить, установлен ли флажок или нет:
$('.myCheckbox').is(':checked');
Это правильный способ проверки и убрав галочки с 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;
});
removeAttr('checked')
а неattr('checked', false)
checked
изменения атрибутов, независимо от способа их изменения.
$('.myCheckBox').prop('checked', true)
Таким образом, он будет автоматически применяться ко всему набору совпадающих элементов (только при настройке, получение все еще только первый)
prop
это определенно подходящий способ установить атрибуты элемента.
Ты можешь сделать
$('.myCheckbox').attr('checked',true) //Standards compliant
или
$("form #mycheckbox").attr('checked', true)
Если у вас есть специальный код в событии onclick для флажка, который вы хотите снять, используйте этот вместо:
$("#mycheckbox").click();
Вы можете снять галочку, удалив атрибут полностью:
$('.myCheckbox').removeAttr('checked')
Вы можете проверить все флажки, как это:
$(".myCheckbox").each(function(){
$("#mycheckbox").click()
});
$(".myCheckbox").click()
.attr
вместо .prop
.
$("#mycheckbox").click();
работал для меня , как я слушал событие изменения также и .attr
& .prop
не срабатывало событие изменения.
Вы также можете расширить объект $ .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 (), если вы используете какую-то другую библиотеку, которая использует эти имена.
.attr
вместо .prop
.
$("#mycheckbox")[0].checked = true;
$("#mycheckbox").attr('checked', true);
$("#mycheckbox").click();
Последний вызовет событие click для флажка, остальные - нет. Поэтому, если у вас есть специальный код в событии onclick для флажка, который вы хотите включить, используйте последний.
.attr
вместо .prop
.
click
событие ненадежно в Firefox и Edge.
Чтобы установить флажок, вы должны использовать
$('.myCheckbox').attr('checked',true);
или
$('.myCheckbox').attr('checked','checked');
и чтобы снять флажок, вы всегда должны установить его в false:
$('.myCheckbox').attr('checked',false);
Если вы делаете
$('.myCheckbox').removeAttr('checked')
он удаляет атрибут все вместе, и поэтому вы не сможете сбросить форму.
ПЛОХО ДЕМО 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');
}
});
$(".mycheckbox").prop("checked", true/false)
Предполагая, что вопрос ...
Помните, что в типичном наборе флажков все входные теги имеют одинаковое имя, они различаются по атрибутуvalue
: для каждого входа набора нет идентификатора.
Ответ Сианя можно расширить с помощью более конкретного селектора , используя следующую строку кода:
$("input.myclass[name='myname'][value='the_value']").prop("checked", true);
Я скучаю по решению. Я всегда буду использовать:
if ($('#myCheckBox:checked').val() !== undefined)
{
//Checked
}
else
{
//Not checked
}
.val()
который всегда будет возвращаться undefined
при вызове 0 элементов, чтобы обнаружить, что объект jQuery пуст, когда вы могли бы просто проверьте его .length
вместо этого) - см. stackoverflow.com/questions/901712/… для более удобочитаемых подходов.
Чтобы установить флажок с использованием 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);
Вот способ сделать это без 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>
Вот код для проверки и снятия отметки с помощью кнопки:
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;
});
});
.attr
вместо .prop
.
Мы можем использовать elementObject
с jQuery для проверки атрибута:
$(objectElement).attr('checked');
Мы можем использовать это для всех версий jQuery без каких-либо ошибок.
Обновление: Jquery 1.6+ имеет новый метод prop, который заменяет attr, например:
$(objectElement).prop('checked');
.attr
вместо .prop
.
Если вы используете PhoneGap для разработки приложений и у вас есть значение на кнопке, которое вы хотите отобразить мгновенно, не забудьте сделать это
$('span.ui-[controlname]',$('[id]')).text("the value");
Я обнаружил, что без пролета интерфейс не будет обновляться независимо от того, что вы делаете.
Вот код и демонстрация того, как установить несколько флажков ...
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;
}
}
});
$("#check")
с необработанными вызовами API DOM, document.getElementsByTagName("input")
кажется мне неуместным, особенно если учесть, что использование for
циклов можно избежать .prop()
. Несмотря на это, это еще один поздний ответ, который не добавляет ничего нового.
Другое возможное решение:
var c = $("#checkboxid");
if (c.is(":checked")) {
$('#checkboxid').prop('checked', false);
} else {
$('#checkboxid').prop('checked', true);
}
Как сказал @ 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();
Если вы используете мобильный телефон, и вы хотите, чтобы интерфейс обновлялся и показывал флажок как непроверенный, используйте следующее:
$("#checkbox1").prop('checked', false).checkboxradio("refresh");
Помните об утечках памяти в Internet Explorer до Internet Explorer 9 , как указано в документации jQuery :
В Internet Explorer до версии 9 использование .prop () для установки для свойства элемента DOM чего-либо, кроме простого примитивного значения (число, строка или логическое значение), может привести к утечкам памяти, если свойство не удаляется (используя .removeProp ( )) до того, как элемент DOM будет удален из документа. Чтобы безопасно установить значения для объектов DOM без утечек памяти, используйте .data ().
.prop('checked',true)
.
Чтобы проверить и снять
$('.myCheckbox').prop('checked', true);
$('.myCheckbox').prop('checked', false);
$('controlCheckBox').click(function(){
var temp = $(this).prop('checked');
$('controlledCheckBoxes').prop('checked', temp);
});
Это, вероятно, самое короткое и простое решение:
$(".myCheckBox")[0].checked = true;
или
$(".myCheckBox")[0].checked = false;
Еще короче было бы:
$(".myCheckBox")[0].checked = !0;
$(".myCheckBox")[0].checked = !1;
Вот и jsFiddle .
Простой JavaScript очень прост и намного меньше накладных расходов:
var elements = document.getElementsByClassName('myCheckBox');
for(var i = 0; i < elements.length; i++)
{
elements[i].checked = true;
}
Я не мог заставить это работать, используя:
$("#cb").prop('checked', 'true');
$("#cb").prop('checked', 'false');
И true, и false установили бы флажок. Что сработало для меня:
$("#cb").prop('checked', 'true'); // For checking
$("#cb").prop('checked', ''); // For unchecking
true
и false
и не 'true'
и 'false'
?
'false'
было преобразовано в логическое значение, в результате чего true
- пустая строка вычисляет, false
таким образом, это «сработало». Посмотрите эту скрипку для примера того, что я имею в виду.
Когда вы отметили флажок, как;
$('.className').attr('checked', 'checked')
этого может быть недостаточно. Вы также должны вызвать функцию ниже;
$('.className').prop('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
});
В jQuery,
if($("#checkboxId").is(':checked')){
alert("Checked");
}
или
if($("#checkboxId").attr('checked')==true){
alert("Checked");
}
В JavaScript
if (document.getElementById("checkboxID").checked){
alert("Checked");
}
.attr
вместо .prop
.