2016-05-19 10 views
1

Ich habe ein einfaches Mad Lib-Programm in JavaScript geschrieben. Alles funktioniert bis auf eine Sache. Mein Name zeigt nicht definiert an. Der Code ist unten. Bitte helfen Sie mir, den Fehler zu finden.Ein einfaches JavaScript Mad Lib-Spiel

Und hier ist codepen Link.

HTML:

Name: <input type="text" id="name"> 
Favourite Color: <input type="text" name="color" id="color"> 
Fovourite Place: <input type="text" name="place" id="place"> 
Number: <input type="number" name="number" id="number"> 
<button id="launch">Launch</button> 
<div id="story"></div> 

Js:

var name = document.querySelector("#name"); 
var color = document.querySelector("#color"); 
var place = document.querySelector("#place"); 
var number = document.querySelector("#number"); 
var story = document.querySelector("#story") 
var launch = document.querySelector("#launch"); 
launch.addEventListener("click", writeStory, false); 

function writeStory(){ 
var launchedStory = ""; 
launchedStory += "<p>Welcome, " + name.value + ". "; 
launchedStory += "Only silly people choose " + color.value + " as their favorite color.</p>"; 
launchedStory += "<p>Is " + place.value + " your current place or your birth place.</p>"; 
launchedStory += "<p>By the way, " + number.value + " is your serial number.</p>"; 

story.innerHTML = launchedStory; 
} 
+0

gut für mich arbeiten in Chro mich. Nicht in Ihrem Codepen tho, aber hier: https://jsfiddle.net/Arg0n/ued2rebb/ – Arg0n

+0

Stellen Sie auch sicher, dass dies ausgeführt wird, nachdem das HTML gerendert – mplungjan

Antwort

0

Schreiben Sie Ihren Code in Skript-Tag in Windows-Ereignis-Onload-Funktion. Der Name der globalen Variablen steht in Konflikt mit der Namenseigenschaft des Fensterobjekts. Sie können den Namen der globalen Variablen auch von einem Namen in einen anderen Namen ändern.

Sol 1.

var nameElement = document.querySelector("#name"); 

Dann können Sie seinen Wert lesen nameElement.value

verwenden, aber es ist gut, nicht den globalen Namensraum verschmutzen. Schreiben Sie Ihren Code in den Funktionsumfang.

Sol 2.

<script type="text/javascript"> 
    window.onload = function() { 
    // your code here 
    } 
</script> 

Hier Geige ist https://jsfiddle.net/mrk_m/L1an24ut/1/

+1

Nicht das Problem. Der Code ist nach den Tags. Siehe auch meinen Kommentar zu der Frage. Durch das Umbrechen einer Funktion wird der Name aus dem globalen Bereich verschoben. – mplungjan

+0

@mplungjan Geänderte Antwort, um Ihren Kommentar zu rechtfertigen. Ich habe nicht gesehen, dass das Script-Tag ganz unten war. –

+0

Ihre Antwort ist jetzt abgeschlossen, aber der Name Teil wurde bereits von @ haim770 – mplungjan

1

Sie müssen sonst die Variablennamen aus name zu etwas ändern, weil der Dolmetscher als window.name stattdessen zu lösen.

+0

Hallo haim770, Vielen Dank für Ihre effektive Antwort. Aber ich möchte wissen, ob der Interpreter 'name' von' name' Attribut des 'input' Tags übernimmt? – Minhaz

+0

Gut gefleckt ... 'var name' außerhalb jeder Funktion wird durch' window.name' global var blockiert. Innerhalb einer Funktion würde es funktionieren – mplungjan

+0

@Minhaz, es geht nicht um das name-Attribut des Elements, sondern um den globalen Kontext. Im Browser ist der globale Kontext das 'Fenster'-Objekt, das zufällig auch eine 'name'-Eigenschaft hat. – haim770

-1

Wenn Sie madlibs tun, dann tun:

puts "give me a transportation" 
transportation = gets.chomp 

Dann

puts "then we got in the {transportation} and went to Wendy's" 
+0

beantwortet Aber alle auf verschiedenen Linien! –

+0

Es ist hilfreich, die Codesyntax zu verwenden (versuchen Sie, die Zeilen auszuwählen, die Sie als Code verwenden möchten, und drücken Sie beim Schreiben von Codefragmenten auf "STRG + K"). Ich weiß nicht, ob sich Ihre Antwort wirklich auf ihre Frage bezieht, warum der Name nicht funktioniert hat! – natureminded

Verwandte Themen