2011-02-08 5 views
3

У меня есть флажки, которые должны действовать аналогично переключателям радиокнопки. По сути, когда вы проверяете, все остальные должны быть сняты. Как я могу достичь этого с минимальной болью?jQuery: отключить все флажки, отличные от текущего

Итак, подведем итоги. Если флажок установлен, все остальные (братья и сестры) должны быть непроверены, оставив кликнув один контрольный статус нетронутым.

Я уже знаю, как снять отметку со всех флажков, но если бы я сделал это, я должен был сначала сохранить проверенное состояние флажка, который был отмечен, а затем повторно применить его после снятия отметки со всех флажков. Я задавался вопросом, есть ли способ сделать это с помощью некоторых причудливых селекторов jQuery или некоторых таких.

+0

проверка http://stackoverflow.com/questions/2279760/how-to-reset-all-checkboxes-using-jquery-or-javascript – JakeParis

+0

Я знаю, как это сделать , Я действительно ищу лучший способ, чем сохранение состояния исходного флажка, а затем повторное его использование. – Chris

ответ

10

С помощью переключателей. Серьезно, радио-кнопки есть не просто так. Люди ожидают, что переключатели «1 из n» и флажки будут выбраны как «0 до n».

Во всяком случае, вот код:

$('input:checkbox').click(function() { 
    $(this).siblings('input:checkbox').removeAttr('checked'); 
}); 

Демо: http://jsfiddle.net/ThiefMaster/AVEjt/

Но, пожалуйста, только использовать его, если вы на самом деле нужно, чтобы позволить пользователю, чтобы снять все. Тогда это приемлемо - иначе переключатели намного лучше.

+0

Я уверен, что у него есть веская причина для их использования. Это действительно комментарий, а не ответ. –

+0

- мой -1 для фактической помощи в конце. –

+0

Я включил ответ через полминуты после публикации комментария. ;) – ThiefMaster

2

Попробуйте это:

$(':checkbox').not(selector_for_current).attr('checked', false); 

Где selector_for_current является «текущей», часто this, если вы находитесь в функции обратного вызова.

+0

Нужно ли использовать '$ (this)' или будет просто 'this' достаточно, поскольку он находится в функции jQuery? – Chris

+0

Получил работу - отличный код спасибо - это именно то, что я искал! – Chris

+2

'this' - элемент DOM (внутри обработчика событий и т. Д.),' $ (This) 'объект jQuery. Как аргумент '.not()' элемент DOM отлично работает. – ThiefMaster

0

Попробуйте это:

$(function() { 
    $("input[type=checkbox]").click(function(){ 
     $(this).siblings("input[type=checkbox]:not(this)").attr("checked", ""); 
    }); 
}); 

См example.

0

В качестве альтернативы очень хорошим ответам ThiefMaster вы можете зарегистрировать событие в родительской форме и уловить все флажки, в том числе те, которые вложены в набор полей (или какой-либо другой элемент), которые будут пропущены с использованием «братьев».

$("#myform").click(function(e) { 
    if ($(e.target).is("input:checkbox")) { 
     $("input:checkbox", this).not(e.target).removeAttr("checked"); 
    } 
}) 

Демо: http://jsfiddle.net/Gs3wa/

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