AttachEvent не работает на IE11
Я пытаюсь сделать два флажка, из которых только один может быть выбран в любой момент времени. Я много искал форумы и нашел несколько предложений.
if (document.attachEvent){
// For IE Browsers.
document.attachEvent("DOMContentLoaded", function (event) {
var saSelector = document.querySelector('input[name=saWrite]');
var cgSelector = document.querySelector('input[name=cgWrite]');
if (cgSelector !== null) {
cgSelector.attachEvent('change', function (event) {
if (cgSelector.checked) {
document.querySelector('input[name=saWrite]').checked = false;
}
});
}
if (saSelector !== null) {
saSelector.attachEvent('change', function (event) {
if (saSelector.checked) {
document.querySelector('input[name=cgWrite]').checked = false;
}
});
}
});
}
Я написал аналогичную функцию с addEventListener вместо attachEvent для браузеров не IE. Это работает на Firefox. Но этот метод почему-то не работает для IE. Я что-то здесь не так делаю? Любые предложения будут полезны. Я хотел бы использовать JQuery для этого. Но я не могу.
1 ответ
https://jsfiddle.net/20g7ym8q/
Вы говорите, что хотите использовать JQuery, но не можете. Я понимаю, что это может показаться реальным ограничением, но это не так. Все, что вы можете сделать с JQuery, вы можете сделать с JavaScript.
Ваш код не будет работать в IE11, потому что attachEvent устарел и удален, чтобы принять addEventListener в качестве стандартного способа прикрепления события во всех современных браузерах. Если вы ищете поддержку поколений без JQuery и без дублирования кода, то, вероятно, лучше всего настроить собственный объект для использования в качестве промежуточного слоя между вашим кодом и браузером.
function $(ele) {
return {
ele: document.querySelector(ele),
on: function(ev, fn) {
(document.attachEvent) ?
this.ele.attachEvent(ev, fn) :
this.ele.addEventListener(ev, fn);
},
checked: function(change) {
if(typeof change !== undefined) this.ele.checked = change;
return this.ele.checked;
}
}
}
Выше приведена функция, которая возвращает Object с двумя методами и свойством. Он работает аналогично JQuery для удобства и согласованности, но не требует дополнительных затрат на включение всей библиотеки JQuery.
Методы позволяют добавить событие, используя .on
с типом события и функцией в качестве параметров. Методы также позволяют вам установить или получить свойство selected указанного элемента. .checked()
просто вернет логическое значение, если флажок установлен, .checked(boolean)
установит свойство elements в желаемое состояние.
На практике, чтобы решить вашу дилемму только с одним допустимым флажком, вы можете сделать это:
var sa = $('input[name="saWrite"]');
var cg = $('input[name="cgWrite"]');
cg.on('click', function(ev) {
sa.checked(false)
});
sa.on('click', function(ev) {
cg.checked(false);
});