У меня есть флажок «Выбрать все», и я пытаюсь синхронизировать его с некоторыми другими флажками на странице. Если все остальные флажки отменены, я хочу снять флажок «Выбрать все».Предотвращение распространения обработчика события при вызове this.checked в другой функции
Проблема заключается в том, что если вы нажмете один из двух флажков, поведение будет не таким, как предполагалось. Я считаю, что это происходит потому, что когда я вызываю this.checked в обработчике событий «select all», он распространяется на другой обработчик событий. Есть ли способ остановить это?
JFiddle: https://jsfiddle.net/te5cefxe/1/
<label class="checkbox"><input id="selectall" type="checkbox" checked>
<span>Deselect All</span></label>
<br>
<label class="checkbox device"><input type="checkbox" name="number" value="1" checked>Choice 1</label>
<br>
<label class="checkbox device"><input type="checkbox" name="number" value="2" checked>Choice 2</label>
$(function(){
$("#selectall").on('click', function(e) {
var sa = this;
$(sa).next().text(sa.checked ? 'Deselect All' : 'Select All');
$("input[type=checkbox]").each(function(){
if (this != sa) {
// prevent the click event from propagating to the function below
this.checked = sa.checked;
}
});
});
$("input[type=checkbox]").on('click', function(e) {
var ck = this;
var sa = $("#selectall")[0];
if (this != sa) {
var dif = false;
$("input[type=checkbox]").each(function(){
if (this != sa && (dif = !(this.checked == ck.checked))) {;
return false; // break out
}
});
if (!dif) {
console.log('same');
sa.click();
}
}
});
});
использование 'e.stopPropagation()' .. –
@acvcu я обновил свой обратный ответ agian. –