IE不允许onClick事件动态创建DOM'a'元素

Ali*_*Ali 7 javascript css firefox events internet-explorer

我在使用Internet Explorer时遇到问题.我有一个链接,它复制表单上的文件上传元素.复制的代码还会向重复的上传元素添加一个超链接,该元素应该删除重复的元素,只需删除此链接即可.

问题是这个代码在Firefox中运行良好,但它在IE中根本不运行.忘记如何编写代码 - 我附加到元素的onClick事件根本不会触发!

我在函数中创建了这样的remove链接元素:

var a = document.createElement('a');
a.setAttribute('href', "javascript:void(0);");
a.setAttribute('class', 'delete');
a.setAttribute('onClick', 'removeThisElement(idOfParentContainer, this)');

container.appendChild(a);
Run Code Online (Sandbox Code Playgroud)

这在Firefox中运行良好,但它在IE中根本不会触发.我使用IE检查器检查了dom并且链接已经很好地呈现但是附加到它的类没有呈现或已经应用,并且即使已经物理地附加到html上的链接也没有触发事件.出于某种原因,即使它是一个警报,无论我放入什么代码,onClick事件都不会触发.我在这里错过了一些东西.:(


伟大得到的问题的第一部分通过使用AddEvent附加事件解决但是为什么不是css渲染我的意思是附加到元素的类根本没有呈现出一些奇怪的原因:(


确实是好建议 - 我正在重写我的代码以避免使用setAttribute函数,而是将所有这些DOM操作移植到jquery.谢谢你的帮助

ann*_*ata 8

事件处理程序不是DOM属性,该属性仅存在于标记中 - 我不确定为什么FF会这样做.我会去研究,因为我想知道.

更新:似乎是关于事件处理程序是否是DOM有效属性的复杂感觉.在我看来这是MS的错,因为他们内部不会将它们视为属性,而HTML规范表明它们非常多.这种情况的直接后果是许多事情!IE会考虑在IE中使用setAttribute设置属性,包括eventhandler绑定,重要的是样式,类和名称.显然IE8修复了这个,但我还没有安装,所以我无法检查.

同时,对于事件绑定,请使用addEventListener/attachEvent对,或者(更不用说因为它是直接赋值)将a.onclick直接设置为目标方法(或者更可能是方法的闭包).

要修复未正确应用的样式,请使用element.style = foo;或(更好)element.className = bar.

本质上问题是setAttribute.避免使用它.

以供参考...