2014-12-09 55 views
0

动态按钮的Onclick事件(页面加载后加载到DOM的按钮)在某些特定的IE实例中不会触发。特别是在IE中的服务器窗口上可以调用问题。它不依赖于IE版本。插入到DOM中的元素没有触发Onclick

HTML:

<div id="test"></div> 

JS:

$(function() { 
    $('#test').append('<input type="button" onclick="alert(1);" value="Test"/>'); 
}); 

的jsfiddle: http://jsfiddle.net/sbzu7xkz/4/

我知道有另一种方式的onclick绑定的替代品,但可惜的是在我的情况下,它是不可能的。

  • 当我将按钮加载到页面时,是否有一些解决方法,比如调用一些初始化等等?
  • 是否有可能的解决方案描述的问题?
  • 难道可以通过修补或重新配置IE来解决吗?

任何帮助appriciated。

+0

你是什么意思这是不可能的?你无法编辑创建按钮的JavaScript吗? – chazsolo 2014-12-09 13:22:59

+0

上述代码在ie9中正常工作 – jsHero 2014-12-09 13:25:05

+0

整个系统基于标签内的onclick属性。实际上按钮通过AJAX与其他HTML元素一起加载到DOM。 – LiborS 2014-12-09 13:27:12

回答

1

内联JS事件动态添加元素在这种情况下不会触发。请使用jQuery的

.on("click", handler) //or a shortcut .click() 

一个讨厌的解决办法是附加的情况下,它没有被这些特定情况下绑定的事件:

var wrapper = $('#test'); 

wrapper.append('<input type="button" onclick="alert(1);" value="Test 2"/>'); 

//if click event isn't presented 
if (typeof(wrapper.getElementsByTagName('input')[0].onclick) === 'undefined'){ 
    // let's attach the event 
    $('#test>input[type="button"]').click(function(){ 
     var js = $(this).attr('onclick'); 
     // and evaluate your JS 
     eval(js); 
    }); 
} 

如果当然,理想情况下,这不应该发生。所有事件都应该在JS中动态绑定。

这是小提琴在旧IE测试,工作得很好:

http://jsfiddle.net/sbzu7xkz/5/

+0

谢谢,我注意到你已经用解决方案http://jsfiddle.net/sbzu7xkz/5/更新了我的小提琴,它工作正常。 – LiborS 2014-12-09 13:55:14

0

旧版浏览器在HTML Singleton Tags中遇到了一些问题。尝试使用“正确的”/旧的HTML。

$('#test').append('<input type="button" onclick="alert(1);" value="Test"></input>'); 

IE只会追加使用正确的HTML(和IE都想关闭html标签)项目

+0

不幸的是按钮在更改后仍然不会触发onclick。 – LiborS 2014-12-09 13:41:23