簡體   English   中英

為什么我的 JavaScript 在 JSFiddle 中不起作用?

[英]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");
}

js小提琴


細節

編輯(基於@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM