gpt4 book ai didi

JavaScript 未在 jsfiddle.net 上运行

转载 作者:IT王子 更新时间:2023-10-29 02:49:51 25 4
gpt4 key购买 nike

下面的代码可以在实时网站上运行,但我无法让它在网站上运行 jsfiddle .

参见 this例如。

谁能告诉我为什么它在 jsfiddle 上不起作用?

在控制台上它记录:ReferenceError: fillList is not definedReferenceError: mySelectList is not defined

当代码作为片段嵌入此处时,您可以看到代码的工作方式:

function BetterSelect(oSelList) {
this.objSelectList = oSelList;
this.objSelectList.onchange = this.selectionChanged;
}
BetterSelect.prototype.clear = function() {
this.objSelectList.options.length = 0;
}
BetterSelect.prototype.fill = function(aValues) {
this.clear();
for (var i = 0; i < aValues.length; i++) {
this.objSelectList.options[i] = new Option(aValues[i]);
}
}
BetterSelect.prototype.find = function(strToFind, bSelect) {
var indx = -1;
this.objSelectList.options.selectedIndex = -1;
for (var i = 0; i < this.getCount(); i++) {
if (this.objSelectList.options[i].text == strToFind) {
indx = i;
if (bSelect)
this.objSelectList.options.selectedIndex = i;
}
}
return indx;
}
BetterSelect.prototype.getCount = function() {
return this.objSelectList.options.length;
}
BetterSelect.prototype.selectionChanged = function() {
alert("selection changed!");
}

var mySelectList = null;
window.onload = function() {
mySelectList = new BetterSelect(document.getElementById('theList'));
}

function fillList() {
mySelectList.fill(["one", "two", "three", "four", "five"]);
}

function findIt() {
mySelectList.find(document.getElementById('txtToFind').value, true);
}
<form action="" method="post">
<select multiple="multiple" name="Select1" id="theList" style="width: 152px; height: 226px">
</select>
<br />
<input name="Button1" type="button" value="Fill The List" onclick="fillList()" />
<input name="Button4" onclick="mySelectList.clear()" type="button" value="Clear The List" />
<br />
<input name="Button2" onclick="alert(mySelectList.getCount())" type="button" value="What's The Count?" />
<br />
<input name="Text1" type="text" id="txtToFind" />
<input name="Button3" type="button" value="Search" onclick="findIt()" />
</form>

最佳答案

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

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

b)(理想方式)- 使用不显眼的 Javascript 仅从 JS 内部将行为附加到 DOM 元素,这意味着将 HTML 与 JS 分开。

c) 使 jsfiddle 不包装加载的内容。更改 onLoad不包裹( body 或头部)。

所以不是 <p onclick="lol()" id="foo">你会做var e = document.getElementById('foo'); e.onclick = lol;仅在 JS 中。

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

关于JavaScript 未在 jsfiddle.net 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5468350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com