为什么我的 JavaScript 不能在 JSFiddle 中运行?

发布于 2024-10-26 17:07:48 字数 427 浏览 6 评论 0原文

我找不到这个 JSFiddle 的问题。

HTML:

<input type="button" value="test" onclick="test()">

JavaScript:

function test(){alert("test");}

当我点击按钮时 - 什么也没发生。控制台显示“测试未定义”

我已阅读 JSFiddle 文档 - 它说 JS 代码已添加到 中,HTML 代码已添加到 < /code> (所以这个 JS 代码早于 html 并且应该可以工作)。

I can't find out what is the problem with this JSFiddle.

HTML:

<input type="button" value="test" onclick="test()">

JavaScript:

function test(){alert("test");}

And when I click on button - nothing happened. The console says "test not defined"

I've read the JSFiddle documentation - there it says that JS code is added to <head> and HTML code is added to <body> (so this JS code is earlier than html and should work).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

中性美 2024-11-02 17:07:48

如果您不指定换行设置,则默认为“onLoad”。这导致所有 JavaScript 都被包装在加载结果后运行的函数中。所有变量都是该函数的局部变量,因此在全局范围内不可用。

将环绕设置更改为“不环绕”,它将起作用:

http://jsfiddle.net/zalun /Yazpj/1/

我将框架切换为“无库”,因为您不使用任何库。

If you do not specify the wrap setting it defaults to "onLoad". This results with all JavaScript being wrapped in a function run after result has been loaded. All variables are local to this function thus unavailable in the global scope.

Change the wrapping setting to "no wrap" and it'll work:

http://jsfiddle.net/zalun/Yazpj/1/

I switched the framework to "No Library" as you don't use any.

碍人泪离人颜 2024-11-02 17:07:48

该函数是在加载处理程序内部定义的,因此位于不同的范围内。正如 @ellisbben 在评论中指出的那样,您可以通过在 window 对象上显式定义它来解决此问题。更好的是,更改它以将处理程序不显眼地应用到对象: http://jsfiddle.net/pUeue/

$('input[type=button]').click( function() {
   alert("test");   
});

注意应用处理程序这样,而不是内联,可以保持 HTML 干净。我正在使用 jQuery,但如果您愿意,您可以使用或不使用框架或使用不同的框架来实现。

The function is being defined inside a load handler and thus is in a different scope. As @ellisbben notes in the comments, you can fix this by explicitly defining it on the window object. Better, yet, change it to apply the handler to the object unobtrusively: http://jsfiddle.net/pUeue/

$('input[type=button]').click( function() {
   alert("test");   
});

Note applying the handler this way, instead of inline, keeps your HTML clean. I'm using jQuery, but you could do it with or without a framework or using a different framework, if you like.

影子是时光的心 2024-11-02 17:07:48

还有另一种方法,将您的函数声明为这样的变量:

test = function() {
  alert("test");
}

jsFiddle


详细信息

编辑(基于关于@nnnnnn的评论)

@nnnnnn:

为什么说 test = (没有 var)会修复它?

当您定义这样的函数时:

var test = function(){};

该函数是在本地定义的,但是当您定义不带 var 的函数时:

test = function(){};

test 是在 window 上定义的位于顶级范围的对象。

为什么会这样?

就像@zalun 说的:

如果您不指定换行设置,则默认为“onLoad”。这导致所有 JavaScript 都被包装在加载结果后运行的函数中。所有变量都是该函数的本地变量,因此在全局范围内不可用。

但是,如果您使用此语法:

test = function(){};

您可以访问函数 test,因为它是全局定义的


参考:

There is another way, declare your function into a variable like this :

test = function() {
  alert("test");
}

jsFiddle


Details

EDIT (based on the comments of @nnnnnn)

@nnnnnn :

why saying test = (without var) would fix it ?

When you define a function like this :

var test = function(){};

The function is defined locally, but when you define your function without var :

test = function(){};

test is defined on the window object which is at the top level scope.

why does this work?

Like @zalun say :

If you do not specify the wrap setting it defaults to "onLoad". This results with all JavaScript being wrapped in a function run after result has been loaded. All variables are local to this function thus unavailable in the global scope.

But if you use this syntax :

test = function(){};

You have an access to the function test because it's defined globally


References :

愿得七秒忆 2024-11-02 17:07:48

更改框架中的换行设置扩展面板,设置为“无封装

Change wrap setting in the Frameworks & Extensions panel, to "No wrap-in <body>"

最冷一天 2024-11-02 17:07:48

您的代码没有问题。只需从右侧选择扩展 onLoad() 即可。

There is no problem with your code.Just choose the extension onLoad() from right side.

十雾 2024-11-02 17:07:48
<script> 
function test(){
 alert("test");   
}
</script>

<input type="button" value="test" onclick="test()">
<script> 
function test(){
 alert("test");   
}
</script>

<input type="button" value="test" onclick="test()">
沦落红尘 2024-11-02 17:07:48
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");
}
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");
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文