Примечание: jQuery не является вариантом.Динамическое изменение флажка не запускается onChange?
Я хочу, чтобы обнаружить изменение состояния флажка, но событие OnChange, кажется, не срабатывает, когда я делаю это:
document.getElementById('myCheckBox').addEventListener('change',function() {
console.log('Changed!');
});
document.getElementById('someLink').onClick = function() {
// toggle checkbox
document.getElementById('myCheckBox').checked = !document.getElementById('myCheckBox').checked;
};
Когда я нажимаю #someLink событие изменения не уволили , Я мог бы добавить еще одного слушателя в #myLink, но если я добавлю другие ссылки, которые проверяют один и тот же ящик, я должен добавить больше слушателей. Мне нужен один слушатель для события изменения флажка. Опять же, jQuery не вариант, мне нужен ванильный JS.
EDIT: Извините, если я не сделал это более понятным, но я хочу избежать добавления сложности каждой ссылки, которая будет проверять этот флажок. Итак, ideal (и, может быть, ответ в том, что это невозможно). Я не хочу, чтобы изменить логику ссылок/кликов вообще. Я хочу иметь возможность изменять свойство .checked в любом месте кода и обнаруживать его без дополнительной логики при каждом изменении (если это возможно).
UPDATE:
Хорошо, так что, по-видимому нет способа сделать это красиво, не меняя логику OnClick, так (как своего рода животное) я в конечном итоге перебирая проблему следующим образом:
function mySentinel() {
if(document.getElementById('myCheckBox').checked) {
console.log("I've been checked!");
return;
}
setTimeout("mySentinel()",100);
}
// then call this somewhere in the on document load section...
mySentinel();
вы можете добавить какой-то тайм-аут, если вы хотите также:
function mySentinel(var i) {
if(document.getElementById('myCheckBox').checked) {
console.log("I've been checked!");
return;
}
if(i <= 0) {
console.log("Time out. Still not checked");
}
i--;
setTimeout("mySentinel("+i+")",100);
}
// then call this somewhere in the on document load section...
// 60 second timeout (some math can make the argument look nicer)
mySentinel(600);
Мне нравится идея добавления класса к каждой ссылке. Это, наверное, самое чистое решение здесь. Это добавляет некоторую сложность для каждой ссылки, но она довольно минимальна. – user439299
Вы можете использовать несколько классов для объекта, поэтому один класс может быть выделен для стилизации, а другой для функциональности. Пример: '
' @ user439299 –