[英]Why isn't my JavaScript working in JSFiddle?
我不知道這個JSFiddle有什么問題。
HTML:
<input type="button" value="test" onclick="test()">
JavaScript:
function test(){alert("test");}
當我點擊按鈕時 - 什么也沒發生。 控制台顯示“未定義測試”
我已經閱讀了 JSFiddle 文檔 - 那里說 JS 代碼被添加到<head>
並且 HTML 代碼被添加到<body>
(所以這個 JS 代碼早於 html 並且應該可以工作)。
如果您未指定包裝設置,則默認為“onLoad”。 這導致所有 JavaScript 都被包裝在一個函數中,在結果加載后運行。 所有變量都是該函數的局部變量,因此在全局范圍內不可用。
將包裝設置更改為“不包裝”,它將起作用:
http://jsfiddle.net/zalun/Yazpj/1/
我將框架切換為“無庫”,因為您不使用任何庫。
該函數是在加載處理程序中定義的,因此在不同的范圍內。 正如@ellisbben 在評論中指出的那樣,您可以通過在window
對象上顯式定義它來解決此問題。 更好的是,更改它以不顯眼地將處理程序應用於對象: http : //jsfiddle.net/pUeue/
$('input[type=button]').click( function() {
alert("test");
});
請注意,以這種方式而不是內聯方式應用處理程序,可以使您的 HTML 保持干凈。 我正在使用 jQuery,但如果您願意,您可以使用或不使用框架或使用不同的框架。
還有另一種方法,將您的函數聲明為這樣的變量:
test = function() {
alert("test");
}
編輯(基於@nnnnnn 的評論)
@nnnnnn :
為什么說
test =
(沒有var
)會解決它?
當您定義這樣的函數時:
var test = function(){};
該函數是在本地定義的,但是當您定義沒有var
的函數時:
test = function(){};
test
是在頂層范圍的window
對象上定義的。
為什么這樣做?
就像@zalun 說的:
如果您未指定包裝設置,則默認為“onLoad”。 這導致所有 JavaScript 都被包裝在一個函數中,在結果加載后運行。 所有變量都是該函數的局部變量,因此在全局范圍內不可用。
但是如果你使用這個語法:
test = function(){};
您可以訪問功能test
因為它是全局定義的
參考 :
將 Frameworks & Extensions 面板中的 wrap 設置更改為“No wrap-in <body>
”
您的代碼沒有問題。只需從右側選擇擴展名 onLoad() 即可。
<script>
function test(){
alert("test");
}
</script>
<input type="button" value="test" onclick="test()">
Select OnDomready
HTML:
<input id="dButton" type="button" value="test"/>
JavaScript:
addEventListener('load', init, false);
function init()
{
oInput = document.getElementById('dButton');
oInput.onclick = test;
}
function test(){
alert("test");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.