今天遇到这个问题,发布以防其他人有同样的问题.
var execBtn = document.createElement('input');
execBtn.setAttribute("type", "button");
execBtn.setAttribute("id", "execBtn");
execBtn.setAttribute("value", "Execute");
execBtn.setAttribute("onclick", "runCommand();");
Run Code Online (Sandbox Code Playgroud)
结果是让IE在动态生成的元素上运行onclick,我们不能使用setAttribute.相反,我们需要使用包含我们想要运行的代码的匿名函数在对象上设置onclick属性.
execBtn.onclick = function() { runCommand() };
Run Code Online (Sandbox Code Playgroud)
不好的想法:
你可以做
execBtn.setAttribute("onclick", function() { runCommand() });
Run Code Online (Sandbox Code Playgroud)
但根据@scunliffe,它将在非标准模式下在IE中中断.
你完全不能这样做
execBtn.setAttribute("onclick", runCommand() );
Run Code Online (Sandbox Code Playgroud)
因为它立即执行,并将runCommand()的结果设置为onClick属性值,也不能这样做
execBtn.setAttribute("onclick", runCommand);
Run Code Online (Sandbox Code Playgroud)