2013-03-06 3 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> 

Я начинаю так потерянным и понятия не имеют, что делать, и это лишь одна из многих проблем, у меня есть.

EDIT:

Таким образом я получил некоторую помощь с моим 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, которые выполнялись на моих массивах, так что все они имели ответ по умолчанию. Также я создал вывод по умолчанию, который будет отображаться в выходном div.

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 + " ."; 
} 

Теперь каждая математика.случайное вычислялось снова, после чего оно вводилось в конкретное текстовое поле, а затем выводилось в выходной div.

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, прежде чем событие click назначит ее, но это другая проблема, я полагаю.

0

вы должны определить переменную mySubject вместе с myVerb и myAdj следующим образом:

var mySubject; 
var myVerb; 
var myAdj; 
0

Вы определяете его внутри function. Объявите их вне функции, затем попробуйте присвоить им значение внутри.

Смежные вопросы