2013-05-28 74 views
-3

我有以下JS代碼。當加載test.php時,我點擊按鈕顯示功能沒有被調用。我試圖在FF上。任何建議這裏有什麼不對。無法調用Javascript函數從按鈕onclick

test.php的

<script type="text/javascript" src="http://localhost/test1.js"></script> 
<script type="text/javascript" src="http://localhost/test2.js"></script> 

test1.js

function show() 
{ 
    alert("hello"); 
} 

test2.js

 function showHTML() 
     { 
     var html = "<!DOCTYPE html>"; 
     html += "<html><body>"; 
     html += "<input type='button' name='button' style='width:100px;height:50px;' onclick='show();' />"; 
     html += "</body></html>"; 
     document.write(html); 
     } 

window.addEventListener("load", function() { 
     alert("eevnet"); 
     showHTML(); 
    }, false); 
+0

'document.write',當文檔初始渲染完成後調用__replaces__當前文檔。新文檔==您的腳本文件不再被嵌入。請不要再使用像'document.write'這樣的東西,而應該查看_Unobtrusive JavaScript_。 – CBroe

+0

可以告訴我什麼是不顯眼的JavaScript – anand

+0

@CBroe - 但它不會在問題中初始渲染後調用。 – Quentin

回答

0

當執行test2.js文件,它增加了一個完整的文檔後,它就像這個:

<!DOCTYPE html> 
<html><body> 
<input type='button' name='button' style='width:100px;height:50px;' onclick='show();' /> 
</body></html> 

沒有任何test1.js文件了,test1.js包含文件不在您的HTML文檔中。

你可以做什麼,如果你真的想生成腳本中的整個HTML,就是以有效的HTML文件inluding JS腳本在它的頭,然後只改變體,例如像這樣

function showHTML() { 
    var html = "<input type='button' name='button' style='width:100px;height:50px;' onclick='show();' />"; 
    document.body.innerHTML = html; 
} 
document.onload = showHTML(); 

但通常的做法是隻添加或更改元素,而不是用HTML字符串替換整個正文。


編輯:在我的測試中,無論是在FF和Chrome瀏覽器有點保留在test1.js定義即使文檔後開始的功能,整個作品。所以我投票結束也不是真正的問題。


EDIT 2,搞清楚真正的問題:

事實上OP稱爲從onload事件處理showHTML功能。所以document.write被稱爲文件加載後,其中results in the replacing of the document by a new one

在初次執行期間,切勿將document.write分開。

+1

它不會重寫整個文檔。由於'document.write'是內聯調用的,它將在文檔仍處於打開狀態時被調用,並且只會附加到目前已解析的文檔部分。 – Quentin

+0

@Quentin你說得對。 –

+0

感謝設置innerHTML正在工作.. – anand