当前位置: 首页 > 面试题库 >

为什么用setAttribute设置的onclick属性无法在IE中工作?

管梓
2023-03-14
问题内容

今天就遇到这个问题,以防其他人遇到同样的问题。

var execBtn = document.createElement('input');
execBtn.setAttribute("type", "button");
execBtn.setAttribute("id", "execBtn");
execBtn.setAttribute("value", "Execute");
execBtn.setAttribute("onclick", "runCommand();");

原来要让IE在动态生成的元素上运行onclick,我们不能使用setAttribute。相反,我们需要使用包装要运行的代码的匿名函数在对象上设置onclick属性。

execBtn.onclick = function() { runCommand() };

错误提示:

你可以做

execBtn.setAttribute("onclick", function() { runCommand() });

但根据@scunliffe,它将以非标准模式在IE中中断。

你根本做不到

execBtn.setAttribute("onclick", runCommand() );

因为它会立即执行,并将runCommand()的结果设置为onClick属性值,所以您也无法执行

execBtn.setAttribute("onclick", runCommand);

问题答案:

要使此功能在FF和IE中均有效,您必须同时编写两种方式:

    button_element.setAttribute('onclick','doSomething();'); // for FF
    button_element.onclick = function() {doSomething();}; // for IE

UPDATE :这是证明有时 _是_必须使用的setAttribute!如果您需要从HTML中获取原始的onclick属性并将其添加到onclick事件中,则可以使用此方法,以便不会被覆盖:

// get old onclick attribute
var onclick = button_element.getAttribute("onclick");

// if onclick is not a function, it's not IE7, so use setAttribute
if(typeof(onclick) != "function") { 
    button_element.setAttribute('onclick','doSomething();' + onclick); // for FF,IE8,Chrome

// if onclick is a function, use the IE7 method and call onclick() in the anonymous function
} else {
    button_element.onclick = function() { 
        doSomething();
        onclick();
    }; // for IE7
}


 类似资料:
  • 我正在创建一个HTML页面,它是使用bootstrap构建的。下面是hello.js文件的最终HTML代码和代码: null null 当我使用submit(提交)按钮而不是alert(报警)单击按钮时,我得到的是错误 未捕获的TypeError:无法设置null的属性“onClick” 有谁能告诉我为什么我要面对这个错误吗??帮助解决它。

  • 使用了python 3.12编写下列程序 运行时报错 报错信息: 为什么会提示找不到属性呢?我尝试在__init__方法中加入self.name="test",然后使用 gc1 = GetConfig() gc1.name 也是报同样的错误

  • 有一个错误,其中登录的用户将尝试更新他们的帐户用户名,但遇到一个错误。在我的一生中,我无法弄清楚为什么有时(可能有1/20的用户遇到这种情况)找不到当前的用户。只有登录后,用户才能访问此页面。错误有: 投掷;//未处理的“错误”事件 TypeError:无法设置null的属性“username” 错误似乎发生在这里:user.username=req.body.username;

  • 问题内容: 我有一个这样的表: 在ajax请求之后,有一个方法向我返回了以下内容: 我想像这样更改innerHTML 但是,似乎IE无法在上设置innerHTML 。谁能为我提供一个解决此问题的简单方法? 问题答案: 没错,tbody元素上的innerHTML在IE中是readOnly 对于除以下对象以外的所有对象,该属性均为可读/写状态;对于以下对象,该属性为只读:COL,COLGROUP,FR

  • 问题内容: 为什么会出现错误或未捕获的TypeError:无法将属性’innerHTML’设置为null?我以为我了解innerHTML并在以前使用过。 问题答案: 您必须将div放在脚本之前,以便在加载脚本时该div存在。

  • 我试着用我的活动模拟器,但不断得到这个错误信息。 我不知道平时怎么跑步。。