2014-12-09 42 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