JavaScript不能打印到文本框

时间:2017-12-06 00:39:56

标签: javascript html

我正在尝试创建一个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>

1 个答案:

答案 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和"是字符串文字,不会引用任何变量。