2010-06-27 4 views

ответ

19
$(function(){ 
    $('#thediv input:checkbox').attr('checked', 'checked'); 
}); 
2

Что redquare имеет будет работать, но это лучшая идея в целом использовать true/false с ними, так что, как они нормированы, вот несколько примеров того, почему это удобная привычка следовать. Например:

$('#myDiv :checkbox').attr('checked', 'checked'); 
alert($('#myDiv :checkbox').attr('checked')); //this alerts true, not "checked" 

You can test this here

Вместо этого, возьмите в привычку прохождения булево, который является гораздо более универсальным, например:

$(function() { 
    $('#myDiv :checkbox').attr('checked', true); 
}); 

Это позволяет намного больше гибкости в более краткий код, например, скажем, у нас был флажок «Проверить все» сверху, как бы это выглядело?

$('#checkAll').change(function() { 
    if(this.checked) { 
    $('#subTable :checkbox').attr('checked', 'checked'); 
    } else { 
    $('#subTable :checkbox').removeAttr('checked', 'checked'); 
    } 
}); 

Теперь мы должны были принести новую функцию, чтобы сделать работу, .removeAttr(). Справедливости ради, this is even how the jQuery documentation does it in the example. Но, вы можете вырезать, что вниз значительно, если воспользоваться нормализацией JQuery делает внутренне, как это:

$('#checkAll').change(function() { 
    $('#subTable :checkbox').attr('checked', this.checked); 
}); 

Это просто что-то иметь в виду, как вы код, одни и те же правила Апи к .attr('disabled') , Есть и другие области, которые нормализуются также ... вероятно, события являются самыми обширными из них, если вам любопытно you can see that here, это уже сделано для вас, используйте его :)

+0

Я знаю, что сломанная запись об этом, но на самом деле, в 'checked' недвижимость элемента флажка на сегодняшний день является самым простым и естественным для использования. То же самое касается 'disabled'. –

+0

@Tim - И что то, что используется :) Однако * установка * свойство на ** нескольких ** элементах непросто сделать в краткой форме, вам придется выполнить ручной вызов '.each()' во всем вашем коде для этого. Вы можете сделать '.checked = true;' в * коллекции * :) –

+0

Я знаю, я знаю. Я сделал это в своем ответе. Я все же предпочел бы использовать свойство 'each()' и свойство 'checked', хотя: теперь у многих разработчиков возникает бесполезная путаница над чем-то чрезвычайно простым благодаря несложной функции' attr() ', которая обычно устанавливает свойства, а не атрибуты) и множественные неопределенные и извилистые способы, которые люди теперь рекомендуют для установки простого булевского флага, который существует и работал счастливо в течение полутора десятилетий. –

11

Люди кажутся искренне смущенными о том, как это сделать это в jQuery. Проверка флажка намного проще и эффективнее без него. Ниже использует сильные Jquery в отборе и итерации списка узлов в сочетании с couldn't-быть проще DOM checked свойства CheckBox элементов:

$("#myDiv input:checkbox").each(function() { 
    this.checked = true; 
}); 

Это не слишком сложно, чтобы вырезать JQuery вообще в этом случае :

var div = document.getElementById("myDiv"); 
var inputs = div.getElementsByTagName("input"); 
for (var i = 0, len = inputs.length; i < len; ++i) { 
    if (inputs[i].type == "checkbox") { 
     inputs[i].checked = true; 
    } 
} 

UPDATE

с момента выхода JQuery 1.6 и prop(), есть разумный способ сделать это в JQuery:

$("#myDiv input:checkbox").prop("checked", true); 
+0

Я знаю, что этот старый, но, может быть, вы можете мне помочь. У меня есть форма, где мне нравится предварительно выбирать все флажки в div, но после отправки формы она должна отображать выбранные поля (пользователь может отменить выбор окна, и теперь все поля снова проверяются), учитывая – alex

0

Это работа в firefox v.17.01. Еще не проверял его на других браузерах.

// Выбор и проверка флажков на нагрузке

$('#enable, #enable1, #enable2, #enable3').attr('checked', 'checked'); 

Смотрите пример:

JS FIDDLE

Смежные вопросы