#jquery
#jquery
Вопрос:
Это продолжение моего последнего вопроса. Что у меня есть, так это следующее:
<div class="abc">
<input id="Response[0]" name="Response[0]" type="checkbox" />
<input id="Response[1]" name="Response[1]" type="checkbox" />
<input id="Response[2]" name="Response[2]" type="checkbox" />
<input id="Response[3]" name="Response[3]" type="checkbox" />
</div>
Я слышал от lonesomeday, что одним из способов проверки набора флажков было следующее:
$('.abc input').change(function() {
if ($('.abc input:checked').length) {
$('#doCheckMark').prop('disabled', false);
} else {
$('#doCheckMark').prop('disabled', true);
}
Но, похоже, здесь может возникнуть проблема со второй строкой. Я думаю, что это моя ошибка, поскольку я изменил код, чтобы добавить div
и a class
.
Что происходит, так это то, что при отладке вызывается функция, но затем я не могу добавить watch для проверки значения .abc input:checked
. Я предполагаю, что я делаю что-то неправильно, поскольку это выглядит неправильно для имени переменной.
Кто-нибудь может здесь помочь. Правильна ли переменная?
Спасибо
Комментарии:
1. Кажется, работает … на Chromium 11.x и Ubuntu 11.04. Принимая во внимание, что вы не закрыли
$(document).ready(function(){
в своем опубликованном jQuery.2. Пожалуйста, объясните в простых шагах, что вы хотите сделать, и что должно произойти?
3. На самом деле у меня его не было в $ (document). готово … Предполагается, что как только пользователь нажимает на одно из полей <input>, свойство кнопки включается.
4. Ах, мои извинения, в этом случае вы не закрыли
$('.abc input').change(function(){
… извините. =/
Ответ №1:
Это то, что вам нужно:
$('.abc input:checkbox').change(function(){
if($('.abc input:checkbox:checked:first').length){
$('#doCheckMark').removeAttr('disabled');
} else{
$('#doCheckMark').attr('disabled', 'disabled');
}
}).trigger('change');
Вы можете протестировать это здесь
Он прикрепит change
событие к набору флажков и запустит change
при загрузке страницы, поэтому кнопка по умолчанию будет отключена. Как только пользователь установит / снимет флажки, он запустит change
событие, и в этом случае он проверит, установлены ли вообще какие-либо флажки. Если установлен какой-либо флажок, кнопка останется включенной, в противном случае кнопка будет отключена. Здесь attr
нужно использовать атрибут, а не свойство prop
.
Ответ №2:
Попробуйте:
$('.abc input').change(function() {
if ($(this).is(':checked')) {
$('#doCheckMark').prop('disabled', false);
} else {
$('#doCheckMark').prop('disabled', true);
}
});
Это переключит #doCheckMark
отключенный статус, когда вы переключаете значение флажка. Конечно, это вызовет путаницу, поскольку у вас так много флажков в этой области. Вы хотите переключить оператор disabled, если все флажки активированы? Если это так, попробуйте:
$('.abc input').change(function() {
if ($('.abc input:checked').length == 4) {
$('#doCheckMark').prop('disabled', false);
} else {
$('#doCheckMark').prop('disabled', true);
}
});
Комментарии:
1. Я хотел бы включить переключение, если будет установлен один или несколько флажков.
2. Обратите внимание, что это логическое свойство, поэтому вы можете просто выполнять
$('.abc input').change(function() { $('#doCheckMark').prop('disabled', $('.abc input:checked').length > 0); });
и при этом довольно четко понимать, что делает код 🙂3. @Ник, это использует твою лапшу, хороший номер 1! @Dave попробуйте либо мой первый фрагмент, либо то, что Ник опубликовал выше. Любой из них должен работать для вас
4. Я пытался выполнить следующее, но, похоже, это не сработало: if ($(‘.ввод abc: проверено’). длина > 0) {
5. @Nick ваш код работает. Как только я нажимаю на один или несколько флажков, кнопка включается. Однако, когда я снимаю все флажки, он остается включенным. Я хочу, чтобы он включался при нажатии на один или несколько флажков.