我找不到这个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,应该可以使用)。
Answers:
该函数是在装入处理程序中定义的,因此属于不同的范围。正如@ellisbben在注释中指出的那样,您可以通过在window
对象上显式定义它来解决此问题。更好的是,更改它以将处理程序毫不干扰地应用于对象:http : //jsfiddle.net/pUeue/
$('input[type=button]').click( function() {
alert("test");
});
请注意,以这种方式而不是内联方式应用处理程序,可以使您的HTML保持整洁。我使用的是jQuery,但您可以在有或没有框架的情况下使用它,也可以使用其他框架。
test
在函数内部定义的onLoad
。使用window.test = function(){/*...*/}
使它完美地工作。
show
到任何jsfiddle URL可以查看我在说什么:jsfiddle.net/Yazpj/show
如果未指定换行设置,则默认为“ onLoad”。结果是所有JavaScript都包装在加载结果后运行的函数中。所有变量都是该函数的局部变量,因此在全局范围内不可用。
将包装设置更改为“不包装”即可使用:
http://jsfiddle.net/zalun/Yazpj/1/
我将框架切换为“无库”,因为您不使用任何库。
还有另一种方法,将函数声明为这样的变量:
test = function() {
alert("test");
}
编辑(基于@nnnnnn的评论)
@nnnnnn:
为什么说
test =
(无var
)会解决?
当您定义这样的函数时:
var test = function(){};
该函数在本地定义,但是在定义函数时不带var
:
test = function(){};
test
window
在顶级范围的对象上定义。
为什么这样做?
就像@zalun那样说:
如果未指定换行设置,则默认为“ onLoad”。结果是所有JavaScript都包装在加载结果后运行的函数中。所有变量都是该函数的局部变量,因此在全局范围内不可用。
但是,如果您使用以下语法:
test = function(){};
您可以访问该函数,test
因为它是全局定义的
参考文献:
test =
(没有var
)可以解决该问题。