簡體   English   中英

為什么我的腳本不能與復選框一起使用?

[英]Why doesn't my script work with checkboxes?

我正在嘗試做一些“游戲”,由於某種原因,如果我嘗試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>

lifebox心不是在所定義loselife()函數。 另外,還要檢查test()函數,該alert()語句具有未定義的變量。

如果您使用的是Google chrome(或任何其他可以幫助您調試的瀏覽器),我建議您通過代碼行進行調試。

我認為最好使用簡單的相等性檢查復選框的狀態,因為我很清楚結果不是布爾值。

所以會是這樣的:

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

或簡單地

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

代替

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

啊啊! 我解決了這個問題。 顯然,當我將復選框的可見性設置為none時,由於某種原因,它還將checkvalue設置為null。 我原以為它會保留校驗值,但是由於某種原因,它不會。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM