Как уже упоминалось, у ваших двух UL не может быть одинаковый идентификатор.Это плохо и приведет к проблемам.Если вам нужно сохранить идентификатор записи базы данных, используйте атрибуты данных data5 * HTML5 или используйте классы:
<ul class="interestgroup_field" data-id="interestgroup_field_400000">
<li class="interestgroup_row"><input type="checkbox" id="group_128" name="group[1][128]" value="1"> <label for="group_128">E-mails about Dogs</label></li>
<li class="interestgroup_row"><input type="checkbox" id="group_256" name="group[1][256]" value="1"> <label for="group_256">E-mails about Cats</label></li>
</ul>
<br />
<ul class="interestgroup_field" data-id="interestgroup_field_400000">
<li class="interestgroup_row"><input type="checkbox" id="group_2" name="group[1][2]" value="1"> <label for="group_2" >Once A Week - Summary E-mail</label></li>
</ul>
Затем, что-то вроде этого должно сделать:
$(document).ready(function() {
$('ul.interestgroup input:checkbox').change(function() {
// see if this is the 3rd checkbox that is by itself
if ($(this).closest('ul').children().length > 1) return; // nope
// grab the other 2 checkboxes so we can fiddle with them
var cbs = $(this).closest('ul').prev().prev().find('input:checkbox');
if ($(this).attr('checked')) {
// disable the others
cbs.attr({ 'checked': false, 'disabled': 'disabled' });
} else {
// enable the others
cbs.attr({ 'disabled': '' });
}
});
});
Вот еще одно решение, которое менее зависит от вашей HTML-структуры, если ваши флажки не всегда располагаются, как указано выше:
Чтобы это работало, при создании ваших флажков вам нужно добавить пару бит информациина каждом флажке.В «комбинированном» флажке вы хотите добавить специальный CSS-класс, чтобы пометить флажок как комбинированный флажок.Флажки с этим классом вызовут особое поведение.Во-вторых, в комбинированном флажке вы хотите оставить идентификаторы флажков, которые он должен отключить:
<input type="checkbox" id="group_128" name="group[1][128]" value="1">Cats</input>
<input type="checkbox" id="group_256" name="group[1][256]" value="1">Dogs</input>
<!-- random html --!>
<input type="checkbox" id="group_2" name="group[1][2]" value="1"
class="combined" data-other-cb="#group_128,#group_256">
Cats and dogs</input>
Посмотрите, как мы помещаем "комбинированный" в качестве класса cssфлажок?Используйте любой класс CSS, который вы хотите, и он не нуждается в каких-либо правилах стиля.Нам просто нужно использовать его как маркерный класс.И посмотрите, как мы использовали атрибут «data-other-cb», чтобы поместить список разделенных запятыми идентификаторов других флажков?Также обратите внимание, что мы поместили «#» перед каждым идентификатором.Это делает его допустимой строкой селектора jQuery, поэтому мы можем просто передать все это значение jQuery, чтобы получить обратно все флажки, о которых идет речь
Теперь мы можем написать следующий метод делегата jquery:
$(document).ready(function() {
$('body').delegate('.combined', 'change', function() { // hookup to change event of all current and future .combined elements
// get the ids of the checkboxes we need to control
var ids = $(this).attr('data-other-cb');
if (!ids) return; // no other ids
// find the checkboxes and manipulate them
var cbs = $(ids);
if ($(this).attr('checked')) {
// disable the others
cbs.attr({ 'checked': false, 'disabled': 'disabled' });
} else {
// enable the others
cbs.attr({ 'disabled': '' });
}
}); // delegate()
}); // ready()