2011-09-26 101 views
1

它爲什麼不起作用?是否可以註冊這樣的事件處理程序?

<body> 
    <p id="element_id"> 
     blah 
    </p> 


</body> 




var pcontent = document.getElementById('element_id').innerHTML; 

function exit(){ 

document.getElementById('id2').innerHTML = pcontent; 

} 

var a = '<div id="id2"><input type="button" value="exit" onclick= "exit()"></div>' ; 


document.getElementById('element_id').innerHTML= a; 

http://jsfiddle.net/B94kx/

+0

什麼是你想?你能解釋一下嗎? – denolk

回答

0

這裏的問題不是你的代碼,而是你在jsfiddle上運行代碼的方式。您的小提琴具有onLoad選項集,這意味着所有JavaScript代碼都在onLoad回調中運行。所以exit函數在回調中定義,而不是在全局範圍內。因此事件處理程序不能引用exit

這個問題可以通過簡單地移除onLoad選項,而不是使用no wrap (body)

工作小提琴:http://jsfiddle.net/NjbVh/

或者交替,你可以通過它連接到window強制exit是一個全球性的。

window.exit = function() { 
    document.getElementById('id2').innerHTML = pcontent; 
} 
1

的問題是,該功能exit不是全局函數。 onclick="exit()"嘗試運行稱爲exit的全局函數,該函數不存在。您在事件處理函數的作用域中定義了該函數(它是窗口的onLoad事件,您可以從左側的面板中看到)。

簡單的解決方案是通過將其設定爲窗口對象的屬性來定義函數爲全局值:

window.exit = function() { 
    document.getElementById('id2').innerHTML = pcontent; 
}; 

Updated fiddle


一個更好的解決方案將是停止濫用DOM使用innerHTML和內聯事件處理程序。這有點笨重,但是here's your code using proper DOM methods

0

你正在失去你的範圍,使得出口()不可見
這裏有一個快速和骯髒的解決方案:

var pcontent = document.getElementById('element_id').innerHTML; 

window.exit = function() { 
    document.getElementById('id2').innerHTML = pcontent; 
} 

var a = '<div id="id2"><input type="button" value="exit" onclick="window.exit()"></div>' ; 

document.getElementById('element_id').innerHTML= a; 
相關問題