2016-04-18 78 views
-1

對不起,打擾了這類問題,我試圖尋找解決我的問題,但找不到任何應用。未定義的函數Javascript(基本)

我試圖通過單擊其他元素來切換一個元素上的一類,這樣做:

var myCanvas = document.querySelector('main'); 

function btOne() { 
    myCanvas.classList.toggle("one"); 
} 

我定義我想添加一個類div和定義的功能。

<main></main> 
<div class="pickers"> 
    <div class="pick one" onclick="btOne()"></div> 
</div> 

它說,當我點擊div時,函數沒有定義。 我似乎無法弄清楚它有什麼問題。 查看我的DEMO真正看到發生了什麼。

在旁註中,我試圖不使用jQuery等庫。

+0

那麼,什麼是* *錯呢?它做什麼,它不做什麼?控制檯中的任何錯誤消息? – deceze

+0

它說,當我點擊div時,函數沒有定義。 –

+0

jQuery是「僅限javascript」。 –

回答

4

的jsfiddle被包裹在onload回調導致function btOne在函數內部作用域和隱含全局範圍代碼。

如果你想有btOne可以在全球範圍內,你需要明確地賦值:

window.btOne = btOne; 

updated fiddle

+0

爲什麼你會建議......不需要進行任何代碼編輯,只需將代碼放在主體底部即可使用。在小提琴上,如果您將負載類型更改爲nowrap-body –

+0

@Pamblam,則精確的代碼將起作用,但最好在意圖和可移植性方面進行顯式定義,而不要依賴於意外突然中斷的隱式行爲。 – zzzzBov

+0

@Pamblam,並且還有更多的代碼問題,使用內聯事件處理程序根本不是個好主意,但是這個問題是關於如何解決缺少全局引用的問題。 – zzzzBov