JSFIDLE.net上未运行JavaScript

JSFIDLE.net上未运行JavaScript,javascript,html,jsfiddle,Javascript,Html,Jsfiddle,下面的代码在一个实时站点上运行,但我无法让它在该站点上运行 例如,见 有人能告诉我为什么它不起作用吗 它在控制台上记录:ReferenceError:fillList未定义和ReferenceError:mySelectList未定义 当代码作为代码段嵌入此处时,您可以看到它的工作原理: 功能更佳选择(oSelList){ this.objSelectList=oSelList; this.objSelectList.onchange=this.selectionChanged; } Bett

下面的代码在一个实时站点上运行,但我无法让它在该站点上运行

例如,见

有人能告诉我为什么它不起作用吗

它在控制台上记录:
ReferenceError:fillList未定义
ReferenceError:mySelectList未定义

当代码作为代码段嵌入此处时,您可以看到它的工作原理:

功能更佳选择(oSelList){
this.objSelectList=oSelList;
this.objSelectList.onchange=this.selectionChanged;
}
BetterSelect.prototype.clear=函数(){
this.objSelectList.options.length=0;
}
BetterSelect.prototype.fill=函数(aValues){
这个.clear();
对于(变量i=0;i





您定义的函数是在onload函数中定义的,因此,在它们可引用之前,因为它们是在该函数中定义的,所以只能从该函数中引用它们。在HTML中将它们引用为全局变量。你有三个选择

a) (最简单、最快、不理想)-将
函数blah(){}
更改为
window.blah=function(){}使函数全局化

b) (理想的方式)-使用不引人注目的Javascript将行为单独从JS中附加到DOM元素,这意味着将HTML与JS分开

c) 让JSFIDLE不要在加载时包装这些东西。将
onLoad
更改为不包裹(身体或头部)

因此,您不需要执行
var e=document.getElementById('foo');e、 onclick=lol仅在JS中


我推荐b,因为它鼓励最佳实践。

在您的小提琴中选择
无缠绕(头部)
在左侧的下拉列表中,单击Run,它将起作用


当选择了
onLoad
时,您的函数将在
$(document).ready(function(){})的闭包中定义仅限。

我发现了相同的问题,并通过在JavaScript设置中更改
加载类型来解决它:

JavaScript设置下拉菜单中的
无换行
无换行
。请参阅下图

看看:

或者最好看看这个:

以下是我测试的内容:

function testJSON() { 
    var jsonString = '{"param1":"123","param2":"XXX78","param3":"11378"}'; 
    var tmp_obj = eval('(' + jsonString + ')');
    document.getElementById("result").innerHTML =  tmp_obj.param2;
}

最好使用第二种方法


p.S.>我来自

谢谢。那么,代码是如何在活动站点上工作的呢?因为这些函数没有在活动站点上的另一个函数中定义。JSFIDLE将JS抛出到函数中。查看源代码,谢谢。但是,需要这种解决方法是非常荒谬的。请参见,除非您试图从会话中读取cookies,否则可能的重复Nowrap是一个不错的选择。现在似乎不再有任何Nowrap选项,即使文档中仍然提到它(它似乎已经过时)。它仍然存在。它位于“Javascript”窗格的“设置”下拉列表中。似乎不再有任何Javascript菜单。@CpnCrunch No。菜单仍在Javascript代码部分的右上角。好的,谢谢,你说得对。我看着窗户的左上方。我从来没有想过菜单选项会出现在子窗口中。
function testJSON() { 
    var jsonString = '{"param1":"123","param2":"XXX78","param3":"11378"}'; 
    var tmp_obj = JSON.parse(jsonString);
    document.getElementById("result").innerHTML =  tmp_obj.param2;
}