`

IE setAttribute onclick 问题

阅读更多

Why does an onclick property set with setAttribute fail to work in IE?

 

Ran into this problem today, posting in case someone else has the same issue.

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

 

 

Turns out to get IE to run an onclick on a dynamically generated element, we can't use setAttribute. Instead, we need to set the onclick property on the object with an anonymous function wrapping the code we want to run.

 

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

 

BAD IDEAS:

You can do

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

 

but it will break in IE in non-standards mode according to @scunliffe.

 

You can't do this at all

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

 

because it executes immediately, and sets the result of runCommand() to be the onClick attribute value , nor can you do

execBtn.setAttribute("onclick", runCommand);
 

 

 

 

 


Or you could use jQuery and avoid all those issues:

var execBtn = $("<input>")
    .attr("type", "button")
    .attr("id", "execBtn")
    .attr("value", "Execute")
    .click(runCommand);
 

jQuery will take care of all the cross-browser issues as well.

 


分享到:
评论

相关推荐

    IE6用setAttribute添加事件无效

    当尝试使用`setAttribute`的`'onclick'`等事件属性时,IE6可能会忽略这些设置,导致事件处理程序无法正常工作。 这个问题的核心在于,IE6不通过`setAttribute`来处理DOM元素的事件绑定,而是需要使用`attachEvent`...

    IE8的JavaScript点击事件(onclick)不兼容的解决方法

    IE8不支持`setAttribute`方法来设置事件处理器是产生兼容性问题的核心原因。在标准模式下,IE8及以下版本不支持通过`setAttribute`直接为元素添加事件监听器,这与现代浏览器如Chrome和Firefox存在差异。为了确保...

    JavaScript的setAttribute兼容性问题解决方法

    然而,在不同的浏览器中,`setAttribute` 方法在处理一些特定的事件监听属性(如`onclick`)时,可能会遇到兼容性问题。 具体来说,在早期的Internet Explorer(IE)浏览器中,直接使用`setAttribute`方法来设置`...

    IE 不兼容的几个js问题及解决方法

    使用`document.createElement`结合`setAttribute`方法创建单选按钮时,在IE中可能会有问题。 **解决方法:** 直接使用HTML字符串创建单选按钮: ```javascript var radio = document.createElement(...

    ajax中的IE和火狐的区别

    - **设置点击事件**: 在绑定事件处理程序时,Firefox支持直接使用`element.onclick = function() {...}`的形式,而IE需要通过`setAttribute`来实现。 - Firefox中可以直接使用`obj.onclick = function(){func();}`...

    JavaScript中setAttribute用法介绍

    不过,需要注意的是,IE并不支持使用`setAttribute()`来设置某些特定属性,特别是对象属性、集合属性和事件属性,如`style`和`onclick`。在这种情况下,我们应该使用点符号法(dot notation)来代替: ```...

    IE DOM实现存在的部分问题及解决方法

    首先,我们来关注第一个问题,即在IE中无法通过setAttribute()方法设置样式信息。在W3C标准中,setAttribute()方法是通用的,可以用来修改或设置任何属性,包括CSS样式。但在IE中,对于CSS属性,这个方法并不起作用...

    javascript setAttribute, getAttribute 在不同浏览器上的不同表现

    测试环境(客户端浏览器 ) IE6,IE7, IE8兼容模式, IE8 Firefox 3.6.8, google chrome 5.0.375.125 先来说明两个函数的标准定义。 elementNode.setAttribute(name,... 一、setAttribute的问题 elementNode为&lt;tr&gt;

    C#控制IE浏览器

    1. **获取IE浏览器实例**:在C#中,我们可以通过枚举所有活动的窗口,识别出IE浏览器窗口,并获取其句柄。常用的API函数有`FindWindow`和`FindWindowEx`,它们可以找到具有特定类名或标题的窗口。一旦获取了句柄,...

    javascript中setAttribute兼容性用法分析

    在Firefox中,使用`setAttribute("class", value)`可以正常工作,但IE需要使用`setAttribute("className", value)`。为了跨浏览器兼容,通常建议同时使用两者。 3. **样式问题**: - `setAttribute("class", value...

    javascript 动态添加事件代码

    这里利用 setAttribute 指定 onclick 属性,简单,很好理解, 但是:IE 不支持,IE 并不是不支持 setAttribute 这个函数,而是不支持用 setAttribute 设置某些属性,包括对象属性、集合属性、事件属性,也就是说用 ...

    javascript动态添加事件[文].pdf

    然而,这种方法在Internet Explorer(尤其是早期版本)中不适用,因为它不支持使用`setAttribute`来设置事件属性,如`onclick`、`onmouseover`等。 对于IE浏览器,我们需要使用方法二,即`attachEvent`。这是一个IE...

    开发跨浏览器JavaScript时要注意的问题

    formElement.setAttribute('onclick', 'doFoo();'); ``` #### 6. 创建单选按钮 创建单选按钮时,需要根据浏览器的不同选择合适的创建方式。在IE浏览器中,可以直接使用`&lt;input type="radio"&gt;`标签。 ```...

    js 动态加载事件的几种方法总结

    有些时候需要动态加载javascript事件的一些方法往往我们需要在 JS 中动态添加事件,这就涉及到浏览器兼容性问题了...但是:IE 不支持,IE 并不是不支持 setAttribute 这个函数,而是不支持用 setAttribute 设置某些属性

    IE6下JS动态设置图片src地址问题

    一种可能的解释是,IE6在某些情况下可能会延迟执行`setAttribute`,导致`src`属性没有立即更新,或者在某些情况下,图片加载的机制出现问题。为了解决这个问题,代码中在`setAttribute`后添加了`return false`,阻止...

    javascript动态添加事件.pdf

    在不同的浏览器中,实现方式略有差异,主要涉及到IE浏览器与非IE浏览器的兼容性问题。以下是关于JavaScript动态添加事件的一些关键知识点: 1. **setAttribute方法**: - `setAttribute` 是一个通用的方法,用于...

Global site tag (gtag.js) - Google Analytics