Я хотів би зробити щось подібне, щоб поставити галочку за 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):
Як тільки користувач натискає прапорець, цей прапорець перестає реагувати на зміни "атрибута".
Ось приклад атрибута прапорця не виконати роботу після того, як хтось натиснув прапорець (це відбувається в Chrome).
Рішення:
За допомогою програми «перевірено» властивість в JavaScript на DOM елементів, ми можемо вирішити цю проблему безпосередньо, замість того , щоб намагатися маніпулювати DOM в робити те , що ми хочемо , щоб це зробити.
Цей плагін змінить прапорецьку властивість будь-яких елементів, вибраних 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();
Останній запустить подію натискання на прапорець, інші - не. Тож якщо у події onclick у власному коді є спеціальний код для прапорця, який потрібно запустити, використовуйте останній.
.attr
замість .prop
.
click
подія є недостовірною у Firefox та Edge.
Щоб встановити прапорець, який ви повинні використовувати
$('.myCheckbox').attr('checked',true);
або
$('.myCheckbox').attr('checked','checked');
і щоб зняти прапорець, завжди слід встановити його на значення false:
$('.myCheckbox').attr('checked',false);
Якщо ти зробиш
$('.myCheckbox').removeAttr('checked')
він видаляє атрибут всі разом, і тому ви не зможете скинути форму.
BAD DEMO jQuery 1.6 . Я думаю, це порушено. Для 1.6 я збираюся зайняти нову посаду на цьому.
НОВА РОБОТА ДЕМО 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;
});
});
Оновлення: Ось той самий блок коду, використовуючи новіший метод підтримки 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+ має новий метод підтримки, який замінює 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');
Істинними, і хибними буде встановлено прапорець. Що для мене працювало:
$("#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
.