我不知道这个JSFiddle有什么问题。
HTML:
<input type="button" value="test" onclick="test()">
JavaScript:
function test(){alert("test");}
当我点击按钮时 - 什么也没发生。控制台显示“未定义测试”
我已经阅读了 JSFiddle 文档 - 它说添加了 JS 代码并添加了<head>HTML 代码<body>(所以这个 JS 代码早于 html 并且应该可以工作)。
我不知道这个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(){};
testwindow在顶级范围的对象上定义。
为什么这样做?
就像@zalun 说的:
如果您未指定包装设置,则默认为“onLoad”。这导致所有 JavaScript 都被包装在一个函数中,在结果加载后运行。所有变量都是该函数的局部变量,因此在全局范围内不可用。
但是如果你使用这个语法:
test = function(){};
您可以访问该函数,test因为它是全局定义的
参考 :
将 Frameworks & Extensions 面板中的 wrap 设置更改为“No wrap-in <body>”
您的代码没有问题。只需从右侧选择扩展名 onLoad()。