Lar*_*bar 113 html javascript jsfiddle
我不知道这个JSFiddle有什么问题.
HTML:
<input type="button" value="test" onclick="test()">
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
function test(){alert("test");}
Run Code Online (Sandbox Code Playgroud)
当我点击按钮时 - 什么也没发生.控制台说"测试未定义"
我已经阅读了JSFiddle文档 - 它说添加了JS代码并添加了<head>HTML代码<body>(所以这个JS代码早于html并且应该工作).
zal*_*lun 98
如果未指定换行设置,则默认为"onLoad".这会导致在加载结果后将所有JavaScript包装在函数运行中.所有变量都是此函数的本地变量,因此在全局范围内不可用.
将包装设置更改为"无包装",它将起作用:
http://jsfiddle.net/zalun/Yazpj/1/
我将框架切换到"No Library",因为你没有使用任何框架.
tva*_*son 60
该函数在负载处理程序中定义,因此在不同的范围内.正如@ellisbben在评论中指出的那样,你可以通过在window对象上明确定义它来解决这个问题.更好的是,改变它以不显眼地将处理程序应用于对象:http://jsfiddle.net/pUeue/
$('input[type=button]').click( function() {
alert("test");
});
Run Code Online (Sandbox Code Playgroud)
注意以这种方式应用处理程序而不是内联,可以保持HTML清洁.我正在使用jQuery,但如果你愿意,你可以使用或不使用框架或使用不同的框架.
R3t*_*tep 21
还有另一种方法,将函数声明为如下变量:
test = function() {
alert("test");
}
Run Code Online (Sandbox Code Playgroud)
编辑(根据@nnnnnn的评论)
@nnnnnn:
为什么说
test =(没有var)会解决它?
定义这样的函数时:
var test = function(){};
Run Code Online (Sandbox Code Playgroud)
该函数是在本地定义的,但是在没有定义函数时var:
test = function(){};
Run Code Online (Sandbox Code Playgroud)
test是window在顶级范围的对象上定义的.
这为什么有效?
就像@zalun说:
如果未指定换行设置,则默认为"onLoad".这会导致在加载结果后将所有JavaScript包装在函数运行中.所有变量都是此函数的本地变量,因此在全局范围内不可用.
但是如果你使用这种语法:
test = function(){};
Run Code Online (Sandbox Code Playgroud)
您可以访问该功能,test因为它是全局定义的
参考文献:
| 归档时间: |
|
| 查看次数: |
50968 次 |
| 最近记录: |