2013-03-06 333 views
1

我们必须执行JavaScript分配。我们必须建立一个句子生成器。当我在Chrome中执行此操作时,单击按钮时没有任何反应。当我检查控制台日志时,它说Uncaught ReferenceError: mySubject is not defined.我以为我已经在element1.onclick函数中定义它了?Javascript输出不显示

这是到目前为止我的代码:

<body> 
    <div id="container"> 
     <div id="buttons"> 
      <button id="btn1">Generate subject</button> 
      <input name="subject" type="text" id="subject" 
      /> 
      <button id="btn2">Generate verb</button> 
      <input name="verb" type="text" id="verb" /> 
      <button id="btn3">Generate adjective</button> 
      <input name="adj" type="text" id="adj" /> 
      <button id="btn4">Generate object</button> 
      <input name="object" type="text" id="object" /> 
     </div> 
     <!--buttons closing div--> 
     <div> 
      <p id="output">asjkldhfahfjasf;d</p> 
     </div> 
     <!--output closing div--> 
    </div> 
    <!--container closing div--> 
    <script> 
     var subject = new Array("Mel Gibson", "Optimus-Prime", "The Cat-lady", "The student", "My Dentist"); 

     var verb = new Array("licks", "pets", "hugs", "stabs", "eats"); 

     var adj = new Array("fat", "ugly", "delicious", "redundant", "hopeless"); 

     var object = new Array("cat", "bacon-strip", "dog-house", "bigmac", "hobo"); 


     var element1 = document.getElementById("btn1"); 
     var element2 = document.getElementById("btn2"); 
     var element3 = document.getElementById("btn3"); 
     var element4 = document.getElementById("btn4"); 

     element1.onclick = function() { 
      mySubject = subject[Math.random() * subject.length] 
     }; 

     element2.onclick = function() { 
      myVerb = verb[Math.random() * verb.length] 
     }; 

     element3.onclick = function() { 
      myAdj = adj[Math.random() * adj.length] 
     }; 

     element4.onclick = function() { 
      myObject = object[Math.random() * object.length] 
     }; 

     document.getElementById("output").innerHTML = mySubject + myVerb + " the" + myAdj + myObject + "."; 
    </script> 
</body> 

我开始得到这么失落,而且不知道该怎么办,这只是许多问题,我有一个。

编辑:

所以我得到了一些帮助,我的JavaScript和一切现在除了输出工作。我希望它输出到输出div,但它不输出任何东西。这是我现在的代码:

<h1>The Amazing Fantastical Sentence Generator!</h1> 

<h4>Have hours of fun with your imaginary friends!</h4> 
</div><!--title closing div--> 
<div id="buttons"> 

<button id="btn1">Generate subject</button> 
<input name="subject" type="text" id="insubject"/> 



<button id="btn2">Generate verb</button> 
<input name="verb" type="text" id="verb"/> 

<button id="btn3">Generate adjective</button> 
<input name="adj" type="text" id="adj"/> 


<button id="btn4">Generate object</button> 
<input name="object" type="text" id="object"/> 

<div > 
<p id="output"></p> 
</div><!--output closing div--> 

</div><!--container closing div--> 

<script> 


var subject=new Array("Mel Gibson", "Optimus-Prime", "The Cat-lady", "The student", "My  Dentist"); 

var verb=new Array("licks", "pets", "hugs", "stabs", "eats"); 

var adj=new Array("fat", "ugly", "delicious", "redundant", "hopeless"); 

var object=new Array("cat", "bacon-strip", "dog-house", "bigmac", "hobo"); 


var element1=document.getElementById("btn1"); 
var element2=document.getElementById("btn2"); 
var element3=document.getElementById("btn3"); 
var element4=document.getElementById("btn4"); 

element1.onclick=function() {document.getElementById('insubject').value=subject[Math.floor(Math.random()*(subject.length))];} 

element2.onclick=function(){document.getElementById('verb').value=verb[Math.floor(Math.random()*(verb.length))];} 

element3.onclick=function(){document.getElementById('adj').value=adj[Math.floor(Math.random()*(adj.length))];} 

element4.onclick=function(){document.getElementById('object').value=object[Math.floor(Math.random()*(object.length))];} 

document.getElementById("output").innerHTML= document.getElementById("insubject").value + document.getElementById("verb").value + " the" + document.getElementById("adj").value + document.getElementById("object").value + "."; 


</script> 
</body> 
</html> 

回答

0

所以我想出了如何解决这个问题。

再次编辑我的代码后,所有的按钮都在工作,但他们没有正确地输出到输出div。所以我宣布了所有正在我的阵列上运行的Math.Random公式,以便它们都有一个默认的答案。此外,我创建了一个默认输出,将显示在输出格。

var subStr = subject[Math.floor(Math.random()*(subject.length))]; 
var verbStr = verb[Math.floor(Math.random()*(verb.length))]; 
var adjStr = adj[Math.floor(Math.random()*(adj.length))]; 
var objStr = object[Math.floor(Math.random()*(object.length))]; 

document.getElementById("output").innerHTML= subStr + " " + verbStr + " the " + adjStr + " " + objStr + " ."; 

然后我改变了我的onclick事件。

element1.onclick=function(){ 

subStr = subject[Math.floor(Math.random()*(subject.length))]; 
document.getElementById('insubject').value=subStr; 
document.getElementById("output").innerHTML= subStr + " " + verbStr + " the " + adjStr + " " + objStr + " ."; 

} 

element2.onclick=function(){ 

verbStr = verb[Math.floor(Math.random()*(verb.length))]; 
document.getElementById('verb').value=verbStr; 
document.getElementById("output").innerHTML= subStr + " " + verbStr + " the " + adjStr + " " + objStr + " ."; 
} 


element3.onclick=function(){ 

adjStr= adj[Math.floor(Math.random()*(adj.length))]; 
document.getElementById('adj').value=adjStr; 
document.getElementById("output").innerHTML= subStr + " " + verbStr + " the " + adjStr + " " + objStr + " ."; 
} 

element4.onclick=function(){ 

objStr= object[Math.floor(Math.random()*(object.length))]; 
document.getElementById('object').value=objStr; 
document.getElementById("output").innerHTML= subStr + " " + verbStr + " the " + adjStr + " " + objStr + " ."; 
} 

现在每个数学。随机数正在被再次计算,然后被输入到特定的文本字段,然后输出到输出格。

0

在函数内部声明的变量是当地这些功能,这意味着你不能使用它们这些功能之外。尝试将变量声明为函数外部的全局变量。

0

When I check the Console Log, it says Uncaught ReferenceError: mySubject is not defined. I thought I defined it already in element1.onclick function?

JavaScript范围是function scope。任何在函数中声明的变量只能被该函数和任何嵌套函数访问,而不能被外部函数访问。

如果你想访问mySubject以外的功能,你需要声明它有你已经verb, subject, etc.. delcared。

此外,即使您仍然有问题,您的document.getElementById命令使用mySubject之前点击事件分配它,但这是一个不同的问题,我想。

0

你应该myVerb和myAdj沿定义mySubject变量,如下所示:

var mySubject; 
var myVerb; 
var myAdj; 
0

要定义function里面。在函数之外声明它们,然后尝试将它们赋值给它们。