2017-12-06 20 views
0

私は、ユーザーが帰属する値をオブジェクトのリストおよびランダムに選択するオブジェクトの数量として受け取り、リストから選択したオブジェクトの数をランダムに印刷するWebツールを作成しようとしています。ボタンがクリックされます。しかし、私は何も印刷することができませんでした。変数をqoutesと一緒に呼び出しようとしましたが、私は計算結果を最終的な読み取り専用テキストボックスに出力しませんでした。私はこの問題がスクリプトの機能のどこかにあると思うが、構文と可能性のある問題を調べるのに何時間も費やした時間と場所を分からない。 Iveはinner.htmlで成功せずに作業しようとしました。現在のメソッド(document.getById ....)は、ランダムに1つのものを選択して結果を出力するように動作するhttp://www.mauvecloud.net/randomchooser.htmlからコピーされます。JavaScriptがテキストボックスに印刷されない

<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

ps。私は終了スクリプトとそれがちょうどアップロードされた開始ボディタグの間に頭のための閉じタグを持っています –

答えて

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` 

変数を関数に渡す場合も同じです。あなたは変数を渡すだけです。 '、 '' 'および"の中にあるものはすべて文字列リテラルであり、どの変数も参照しません。

関連する問題