2012-09-13 76 views

回答

3

工作正常,您只需將該函數放置在文檔頭部(或元素在DOM之後的主體)。

jsFiddle example

+0

等等,你做了什麼來使它工作? – foreyez

+0

將第一個下拉菜單更改爲「no wrap(head)」。你也可以選擇'no wrap(body)'。 – j08691

3

這是因爲當你有選擇的onLoad選項,則在JavaScript面板創建功能不是全球性的。你的JavaScript被封裝在一個函數中。

如果你想他們是全球性的,你必須要麼做什麼j08961建議,通過改變下拉說不包(身體或頭部)將工作

最好的解決辦法是不設置您的活動來自HTML的處理程序,無論如何這都是不好的做法,那麼你不會依賴全局函數或混合HTML和JS。

<div id="myDiv"> 
</div>​ 
document.getElementById('myDiv').onmousemove = function() { 
    alert('here'); 
} 

注意:你應該注意到控制檯中的錯誤,說myFunc是未定義的或類似的東西。

0

我認爲這是jsfiddle的原因,它聲明瞭HTML之後的所有javascript。 HTML將會運行並尋找myFunc,但找不到它。然後它會加載JS,它甚至不會運行它。

+1

不是真的,在HTML之後轉換函數不是問題。問題是jsfiddle默認使用匿名函數來包裝它。請閱讀我的和j08691的回答以獲得清晰的解釋 –

+0

Ahh感謝您的澄清。是的,我剛剛讀過它們。 – aug

0

使myFunc成爲全局函數;

我用螢火蟲搜尋我的代碼,並得到以下生成的代碼。

window.addEvent('load', function() { 
    //window.myFunc makes myFunc as a global function 
    // It can be accessed from any were inside current window. 
    window.myFunc = function myFunc(x) 
    { 
     alert('yo'); 
    } 
    // function below is not available gloably. 
    function myFunct1(){ 
     alert('yo1'); 
    } 
}); 

看到jsfiddle

+0

工程,但沒有解釋問題是什麼。 –

+0

如果搜索window.myFunct,你會得到以下生成代碼window.addEvent( '負載',函數(){ window.myFunc =函數myFunc的(X) { 警報( '喲'); } }); //]]>這清楚地反映了你寫的代碼範圍不是全局的 – Anoop

+0

你可以從鏈接中獲得關於JavaScript函數範圍的更多信息http://stackoverflow.com/questions/500431/javascript-variable-scope – Anoop

0

在這裏你可以看到的變化:jsfiddle.

+0

便宜的方式,使它的工作不知道問題是什麼 –

+0

這裏的東西是使它的工作,它並不重要。是否有用? :P –

+0

這是一種天真的編碼和解決問題的方式。如果你一直這麼想,你的解決方案總是很脆弱。 「是否有用?」讓你聽起來像你不在乎使其正常工作。 –