我正在尝试创建一个Web工具,将用户估算的值作为对象列表和一些随机选择的对象,然后在单击按钮时随机打印出从列表中选择的对象数。但是我无法打印任何东西。我试图用qoutes和没有它们调用变量,我仍然没有得到计算机在最终的只读文本框中打印任何结果。我认为这个问题在我的脚本函数中的某个地方,但我无法弄清楚在哪里,我花了几个小时查找语法和可能的问题无济于事。我试图使用inner.html但没有成功,当前的方法(document.getById ....)是从http://www.mauvecloud.net/randomchooser.html复制的,可以随机选择一个并打印结果。
<html>
<style></style>
<head>
<title>Random Chooser</title>
<script>
Array.protoype.chooseFromArray() = function(){
var chosenIndex = Math.floor(Math.random() * ValueArray.length);
var elementPicked = ValueArray["chosenIndex"];
ValueArray.splice("chosenIndex",1);
return elementPicked;
}
function chooseRandomly(){
var ValueArray = document.getElementById("valuelist").value.split("\n");
var numItems = document.getElementById("items").value;
var ReturnArray = [];
for(i=0; i < numItems; i++){
var element = ValueArray.chooseFromArray();
ReturnArray.push("element");
}
document.getElementById("result").value = ReturnArray.toString();
}
</script>
<body>
Enter some values, one on each line, then click the choose button to pick randomly.
<form action onsubmit="return false;">
<textarea id="valuelist" rows="15" cols="60"></textarea>
<br>
<br>
Randomly choose <input type="number" id="items" > items
<br>
<input type="button" value="Choose" onclick="chooseRandomly();return false">
<br>
<br>
<input id="result" type="text" size="80" value readonly="readonly">
<br>
<br>
</form>
</body>
</html>
答案 0 :(得分:0)
您对一些JavaScript语法点感到困惑。我不打扰纠正非惯用风格,一旦你理解了下面列出的变化,你应该自己read more about that here。
首先,这里是已清理和修复的版本,以便我们一起查看:
Array.prototype.chooseFromArray = function() {
var chosenIndex = Math.floor(Math.random() * this.length);
var elementPicked = this[chosenIndex];
this.splice(chosenIndex, 1);
return elementPicked;
}
function chooseRandomly() {
var ValueArray = document.getElementById("valuelist").value.split("\n");
var numItems = document.getElementById("items").value;
var ReturnArray = [];
for (var i = 0; i < numItems; i++) {
var element = ValueArray.chooseFromArray();
ReturnArray.push(element);
}
document.getElementById("result").value = ReturnArray.toString();
}
window.chooseRandomly = chooseRandomly;
首先,要在JSFiddle上引用HTML中的函数,您需要在窗口上定义它。你通常不需要这样做,所以你大多可以忽略这一点。
通常,您有几个语法错误。
在对象(prototypes are objects (MDN))上定义属性就像变量赋值一样,所以你只需要编写object.<property_name> = value
。您正在调用chooseFromArray
然后分配给该调用(这只是无效的语法)。
在为原型创建函数时,this
通常会引用调用该函数的对象。在这种情况下,任何调用chooseFromArray
的数组都将自己绑定到原型函数中的this
引用。
通过索引器访问属性时,只需传递字符串即可。如果它是变量,则不要用字符串包围它。例如:
var chosenIndex = 123;
var elementPicked = this["chosenIndex"];
// This is the same as this.elementPicked;
var elementPicked = this[chosenIndex];
// This is what you want as you're accessing the `123` property on `this`
将变量传递给函数也是如此。你只需传递变量。 '
中的任何内容,&#39; “&#39; s和"
是字符串文字,不会引用任何变量。