2017-12-06 3 views
0

Ich versuche, ein Web-Tool, das Benutzer imputierten Werte als eine Liste von Objekten und einer Anzahl von Objekten nach dem Zufallsprinzip auswählen zu machen und dann die Anzahl der Objekte aus der Liste zufällig ausgedruckt, wenn Die Schaltfläche wird angeklickt. Ich konnte jedoch nichts drucken. Ich habe versucht, die Variablen sowohl mit qoutes als auch ohne sie aufzurufen, und ich habe immer noch nicht die Berechnung erhalten, um Ergebnisse in der endgültigen Nur-Lese-Textbox zu drucken. Ich denke, das Problem liegt irgendwo in meinen Skriptfunktionen, aber ich kann nicht herausfinden, wo ich stundenlang nach Syntax und möglichen Problemen gesucht habe, ohne Erfolg. Ich habe versucht, mit inner.html ohne Erfolg zu arbeiten, und die aktuelle Methode (document.getById ....) wird von http://www.mauvecloud.net/randomchooser.html kopiert, das funktioniert, um zufällig eine Sache zu wählen und das Ergebnis zu drucken.JavaScript nicht in Textfeld drucken

<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. Ich habe ein Closing-Tag für den Kopf zwischen dem Closing-Skript und dem Start-Body-Tag, das es gerade hoch geladen hat –

Antwort

0

Sie sind auf ein paar JavaScript-Syntax Punkte verwirrt. Ich werde nicht stören, den nicht-idiomatischen Stil zu korrigieren, sollten Sie read more about that here auf eigene Faust, sobald Sie die unten beschriebenen Änderungen verstehen.

Zuerst ist hier die aufgeräumt und feste Version so können wir einen Blick auf sie zusammen:

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; 

zuerst das erste, was eine Funktion von HTML auf JSFiddle verweisen Sie werden es brauchen definiert werden auf dem Fenster. Normalerweise müssen Sie das nicht tun, daher können Sie diesen Punkt meistens ignorieren.

Im Allgemeinen haben Sie mehrere Syntaxfehler.

Das Definieren einer Eigenschaft für ein Objekt (prototypes are objects (MDN)) geschieht genau wie die Zuweisung von Variablen, also schreiben Sie einfach object.<property_name> = value. Sie haben chooseFromArray angerufen und dann diesen Aufruf zugewiesen (was nur eine ungültige Syntax ist).

Beim Erstellen von Funktionen für Prototypen verweist this normalerweise auf das Objekt, das die Funktion aufruft. In diesem Fall wird sich jedes Array, das chooseFromArray aufruft, an die this Referenz in der Prototyp-Funktion gebunden haben.

Beim Zugriff auf Eigenschaften über den Indexer übergeben Sie einfach die Zeichenfolge. Wenn es sich um eine Variable handelt, umgeben Sie sie nicht mit Zeichenfolgen. Bsp .:

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` 

Das gleiche gilt für die Übergabe von Variablen an Funktionen. Sie übergeben nur die Variable. Alles innerhalb von ' s, '' s und " s sind Zeichenfolgenliterale und verweisen nicht auf Variablen.