2011-01-21 4 views
0

Я пытаюсь сделать небольшую «игру», и по какой-то причине, если я попытаюсь установить флажок checked, мой скрипт перевернется ... иногда он работает, иногда он просто прекращает выполнение. Есть ли какая-то ошибка, которую я пропустил?Почему мой скрипт не работает с флажками?

<html> 
<head> 
<title>Untitled Document</title> 
<script> 
var check = "showcheck"; 
var number = 1234; 
var lvl = 1; 
var oldlvl = 1; 
var multiplier = 10000; 
var start = 1; 

function exefunction() { 
    document.getElementById("boxv").focus(); 
    if (check == "showcheck") { 
     document.getElementById("message").innerHTML = "What was the number?"; 
     document.getElementById("num").style.display = "none"; 
     document.getElementById("box").style.display = "inline"; 
     document.getElementById("boxv").focus(); 
     check = "checknum"; 
    } 
    else if (check == "checknum") { 
     if (document.getElementById("boxv").value == number) { 
      document.getElementById("message").innerHTML = "CORRECT!"; 
      document.getElementById("boxv").style.color = "#00DD00"; 
      document.getElementById("boxv").value = number; 
      document.getElementById("level").innerHTML = "Level: " + lvl; 
      lvl++; 
     } 
     else if (document.getElementById("boxv").value != number) { 
      document.getElementById("message").innerHTML = "INCORRECT!"; 
      document.getElementById("boxv").style.color = "#DD0000"; 
      document.getElementById("boxv").value = number; 
      document.getElementById("level").innerHTML = "Level: " + lvl; 
      if (lvl>1) {lvl--;} 
      loselife(); 
     } 
     check = "showmem"; 
    } 
    else if (check == "showmem") { 
     if (lvl == oldlvl + 10) { 
      oldlvl = lvl; 
      multiplier = multiplier * 10; 
      document.getElementById("boxv").maxLength = multiplier.toString().length - 1; 
     } 
     else if (lvl < oldlvl) { 
      oldlvl = lvl - 10; 
      multiplier = multiplier/10; 
      document.getElementById("boxv").maxLength = multiplier.toString().length - 1; 
     } 
     number = Math.floor(Math.random() * multiplier/10 * 9) + multiplier/10; 
     document.getElementById("boxv").style.color = "#000000"; 
     document.getElementById("boxv").value = ""; 
     document.getElementById("message").innerHTML = "Memorize this number: "; 
     document.getElementById("num").innerHTML = number; 
     document.getElementById("num").style.display = "inline"; 
     document.getElementById("box").style.display = "none"; 
     check = "showcheck"; 
    } 
} 

function loselife(){ 
    var life = 4; 
    var hearts = "&#9829; "; 
    alert(document.getElementById("lifebox").checked); 
} 
function submitenter() { 
    var keycode = window.event.keyCode; 
    if (keycode == 13) { 
     if (start === 0) {exefunction();} 
     else {startfunc();} 
    } 
    if (keycode < 47 || keycode > 58) { 
     return false; 
    } 
} 

function startfunc() { 
    document.getElementById("button").innerHTML = '<input name="" type="button" value="OK" onClick="exefunction()"/>'; 
    document.getElementById("level").innerHTML = "Level: " + lvl; 
    document.getElementById("message").innerHTML = "Memorize this number: "; 
    document.getElementById("num").style.display = "inline"; 
    document.getElementById("boxv").value = ""; 
    document.getElementById("box").style.display = "none"; 
    if (document.getElementById("lifecheck").checked === true) { 
     document.getElementById("life").innerHTML = "&#9829; &#9829; &#9829; &#9829; &#9829; "; 
    } 
    else if (document.getElementById("lifecheck").checked === false) { 
     document.getElementById("life").innerHTML = ""; 
    } 
    if (document.getElementById("timercheck").checked === true) { 
     document.getElementById("timer").innerHTML = "3:00"; 
    } 
    else if (document.getElementById("timercheck").checked === false) { 
     document.getElementById("timer").innerHTML = ""; 
    } 
    start = 0; 
} 

function tests() { 
    alert(lfckv); 
} 
</script> 
<style type="text/css"> 
#level, #life, #timer{ 
    color: #666; 
} 
* { 
    text-align: center; 
} 
#num { 
    display: none; 
} 
#num { 
    font-size: x-large; 
} 
#body { 
    margin-top: 250px; 
    margin-right: auto; 
    margin-bottom: 100px; 
    margin-left: auto; 
} 
body { 
    background-color: #6FF; 
} 
</style></head> 
<body onKeyPress="return submitenter()" > 
<div id="body"> 
<span id="level"></span> 
<table align="center"> 
    <tr> 
    <td width="200" height="50" align="center" valign="middle"><span id="message">What level would you like to begin at?</span></td> 
    <td width="200" height="50" align="center" valign="middle"><span id="num">1234</span><span id="box"><input type="text" id="boxv" maxlength="4" value="1"/></span></td> 
    </tr> 
</table> 
<table align="center"> 
    <tr> 
    <td width="200" id="life"><label><input id="lifecheck" type="checkbox" >Lives</label></td> 
    <td id="button"><input type="button" value="OK" onClick="startfunc()"/></td> 
    <td width="200" id="timer"><label><input id="timercheck" type="checkbox" >Timer</label></td> 
    </tr> 
</table> 
<input name="" type="button" onClick="tests()" value="tests()"> 
</div> 
</body> 
</html> 
+1

Что-нибудь в консоли javascript? «flip out» - не совсем полезная диагностика. –

ответ

0

Ахаха! Я понял проблему. По-видимому, когда я устанавливаю видимость флажка равным нулю, он также по какой-то причине также устанавливает значение checkvalue. Я ожидал, что он сохранит контрольную сумму, но по какой-то причине это не так.

0

lifebox разве определяется в функции loselife(). Кроме того, также проверьте функцию test(), что оператор alert() имеет переменную, которая не определена.

Если вы используете Google chrome (или любой другой браузер, который может помочь вам отладить), я предлагаю вам отлаживать ваши строки кода.

+0

в chrome, все, что я получаю, это «Uncaught TypeError: Не могу прочитать свойство« checked »из null» – Sean

+0

Шон, возможно, вы хотели сделать 'document.getElementById (« lifecheck »)' not '" lifebox "'? Это главное. Кроме того, у разработчиков Chrome и IE8 и Firebug есть опции «break on error», которые вы можете использовать, чтобы увидеть, где именно происходит эта ошибка, и, возможно, выяснить, какие переменные есть в то время. –

0

Я думаю, что вам лучше использовать простое равенство для проверки состояния ваших флажков, потому что я довольно результат не логический.

Так что было бы что-то подобное:

if (document.getElementById("lifecheck").checked == true) { 

или просто

if (document.getElementById("lifecheck").checked) { 

вместо

if (document.getElementById("lifecheck").checked === true) {