Я хотел бы сделать что-то вроде этого, чтобы отметить 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.