2015-05-28 3 views
0

Я новичок в jQuery и надеюсь, что кто-то здесь может помочь мне с этим вопросом.jQuery: Отметьте/снимите отметку со всех братьев и сестер с определенным классом

Я пытаюсь создать «все» флажок для включения/выключения всех своих одноуровневые флажков (т.е. те, под тем же DIV/родителя) - но только если они не имеют определенного класса ("other").

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

Код У меня есть работы без переключателя :not(), но я не могу заставить его работать, когда я включаю это. Кроме того, я не уверен, что мой подход является лучшим/быстрым способом здесь.

Мой JQuery:

$('.checkAll').click(function(){ 
    if($(this).is(':checked')){ 
     $(this).siblings(":not($('.other'))").prop('checked', true); 
    }else{ 
     $(this).siblings(":not($('.other'))").prop('checked', false); 
    } 
}); 

Большое спасибо заранее за любую помощь, Mike

+0

От w3.org: 'Примечание: Во время обработки события щелчка на входном элементе с атрибутом типа, который имеет«радио значение »или« checkbox », некоторые реализации могут изменить значение этого свойства до того, как событие будет отправлено в документе.« Поэтому вы должны использовать событие «change», даже если все современные браузеры поддерживают «click» событие красиво AFAIK. EDIT: только что проверил источник jQuery и, как обычно, это учитывается (нормализовано), см. Код ниже: –

+0

'/ * Для флажка, инициировать собственное событие, проверенное государством, будет правильным */ \t \t \t trigger: function() { \t \t \t \t, если (jQuery.nodeName (это "вход") && this.type === "флажок" && this.click) { \t \t \t \t \t this.click(); \t \t \t \t \t return false; \t \t \t \t} \t \t \t} ' –

+0

@ A.Wolff: Спасибо за это, как хорошо! – keewee279

ответ

2

Вам не нужно jQuery Selector внутри :not.

$('.checkAll').on('click', function() { 
    $(this).siblings(":not('.other')").prop('checked', $(this).is(':checked')); 
}); 

$(this).is(':checked') возвращает true/false, которые вы проверили с помощью if и назначены же к checked.

+1

Спасибо за быстрый ответ - это очень помогло! Примите, как только смогу. :) – keewee279

+0

Чтобы сделать это прямо в будущем, можете ли вы объяснить последнюю часть своего кода?Является ли это всего лишь короткой записью инструкции if? – keewee279

+1

@ keewee279 Добавлено. Ответьте на вопрос – Tushar

2

Вам не нужно $ внутри :not. Вы можете оптимизировать код, который вы используете this.checked, и избегать оператора if.

$('.checkAll').click(function(){ 
     $(this).siblings(":not('.other')").prop('checked', this.checked); 
}); 
+0

Спасибо за это! – keewee279

+0

Добро пожаловать – Adil

0

удалить объект JQuery в не селекторе, вы можете использовать строку

$(this).siblings(":not('.other')").prop('checked', true); 
Смежные вопросы