2009-03-03 54 views
8

我附加了一些包含javascript的HTML。包含javascript的附加HTML無法運行,我該如何讓它運行?

<td onclick="toggleDay('+data+',this,\'tue\');">T</td> 

<img src="img/cross.png" onclick="deleteAlarm('+data+');"> 

這兩段代碼都在我追加HTML的大金額。

他們工作正常,如果他們已經在那裏,當頁面加載,但沒有當我追加。

你建議我做什麼?是否需要某種排序請求讓DOM在append之後重新解釋JavaScript?

編輯:

只是一些更多的信息,我有這個問題,因爲我加入了一些東西與AJAX到數據庫中,併成功我追加的HTML到它需要。有同樣的方式SO與評論。

EDIT2:

即使所有關於它的討論,感謝您的答案,得到它的工作。

回答

4

我會做這樣的:

首先添加ID屬性設置你的HTML:

<td id="toggleDayCell">T</td> 

<img src="img/cross.png" id="crossImg"> 

然後有一個在頁面的onload事件運行,並重視的事件你」的Javascript重新感興趣。

PrototypeJS,它可能是這樣的:

Event.observe(window, 'load', function(){ 
    if($('toggleDayCell')) { 
    Event.observe($('toggleDayCell'), 'click', function(event){ 
     //do stuff here 
    } 
    } 

    if($('crossImg')) { 
    Event.observe($('crossImg'), 'click', function(event) { 
     //do stuff here 
    } 
    } 
}); 

使用類似的原型(或jQuery的)是不錯的,因爲它需要跨瀏覽器兼容的照顧。

1

將HTML附加到文檔,然後以編程方式將onclick事件添加到對象。

這是把我的頭頂部,但...我認爲你可以這樣來做:

IE:

Object.onclick = someFuntion 

FF:

Object.addEventListener('click', someFunction); 
+0

你是怎麼做到的? – fmsf 2009-03-03 20:33:48

0

應該使用addEventListener('click', /*...*/)而不是在innerHTML中設置onclick或其他。

IE調用addEventListener完全是另一回事,所以你也必須補償這一點。

(編輯:IE調用它attachEvent()希望這是一些使用的。)

3

你附加通過AJAX HTML?如果是這樣,你將不得不手動eval()你正在返回的JavaScript。你可以換一個DIV的響應,做這樣的事情:

wrapper.getElementsByTagName("script") 
// for script in wrapper... 
eval(script.innerHTML) 

如果您使用的是像原型庫這將是更簡單,因爲你可以傳遞給evalScripts響應()方法。

+0

我剛剛在絕望的谷歌搜索中發現了你的帖子。你解決了我的問題。我喜歡你。 – adolfojp 2009-03-30 08:53:34

0

AJAX有一些怪癖......特別是IE瀏覽器。示例:您不能使用innerHTML屬性在表格元素(在IE中)插入/更新任何內容。最好使用DOM函數插入/更新/刪除元素節點(或添加事件處理程序)。您可以使用上面提到的eval()函數來運行動態加載的JavaScript,它使用DOM對象修改文檔。