2012-01-02 2 views
2

Я начинаю с Javascript и не могу получить код ниже для работы. Когда я нажимаю кнопку, ничего не происходит. Может ли кто-нибудь указать, что я сделал неправильно? Благодаря!не может получить функцию javascript для выполнения

<html> 
<head> 
<title>Sarah's Puppy Game</title> 
</head> 
<body> 
    <div id="input"> 
     <input id="puppyNumber" size=30> 
     <button onClick="doLoop()"> Get your puppies </button> 
    </div> 
    <script type="text/html"> 
     function doLoop() { 
     var number = document.getElementById('puppyNumber').value; 
      var puppy = []; 
      while (var i = 0; i < parseInt(number); i++) { 
       puppy = puppy.push('puppy<br>'); 
      } 
      alert(puppy); 


     } 
    </script> 
</body> 
</html> 
+0

Что вы ожидаете произойдет? –

+0

окно предупреждения для всплывающего окна со словом щенок напечатано количество раз, когда я вошел во вход – user1086348

+0

Вещи, которые вы можете попробовать, когда «ничего не происходит»: 1) Проверьте журнал ошибок JavaScript вашего браузера. 2) Добавьте «предупреждающие» заявления, чтобы получить представление о том, что происходит. –

ответ

1

Вместо того, чтобы ...

puppy = puppy.push('puppy<br>'); 

... просто сказать ...

puppy.push('puppy<br>'); 

push возвращает элемент, который был выдвинут, а не массив, к которому она была отодвинута ,

Ваш код приведет к тому, что переменная puppy будет установлена ​​в строку "puppy<br>". Затем вы попытаетесь сделать "puppy<br>".push("puppy<br>"), что явно недействительно.

+0

Есть еще несколько проблем с кодом :-) –

+0

Ответ Майкла - более полный ответ здесь, и я отметил его как таковой. –

+0

вы, ребята, огромное спасибо! есть ли причина использовать цикл for вместо цикла while вообще в javascript? – user1086348

5

Три проблемы, которые я вижу.

  1. Во-первых, использовать text/javascript для <script type='text/javascript'>

  2. Во-вторых, изменить while к for в цикле. A while цикл предназначен для тестирования на состояние, но вы настроили счетчик.

  3. Thrid, не назначайте puppy методом push(). .push() действует непосредственно на массив.

Here's the corrected version in action.

<!-- type="text/javascript" not "text/html" --> 
<script type="text/javascript"> 
    function doLoop() { 
    var number = document.getElementById('puppyNumber').value; 
     var puppy = []; 

     // This is a for loop, rather than a while loop 
     // Also for good measure, use the second param to parseInt() for a 
     // decimal radix to avoid getting binary or octal numbers accidentally. 
     for (var i = 0; i < parseInt(number, 10); i++) { 
      // Don't assign the result back to puppy 
      puppy.push('puppy<br>'); 
     } 
     alert(puppy); 


    } 
</script>