0

私は過去にJavaScriptで多くのコーディングを行ってきたので、これほど単純なものを何時間も見つめ、なぜそれが機能しないのか理解できないと、特にイライラします。このコードが完全に応答しない理由を誰かに教えてもらえますか?

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
var passCode = 0;

function oneFunc()
{
    passCode = 1;
}
function oneFunc()
{
    passCode = 2;
}
function oneFunc()
{
    passCode = 3;
}
function oneFunc()
{
    passCode = 4;
}

if(passCode == 1)
{
    if(passCode == 2)
    {
        if(passCode == 3)
        {
            if(passCode == 4)
            {
                window.location.href = 'frompassCode.html';
            }
        }
    }
}
</script>
<title> </title>
</head>

<body>

<button onclick="oneFunc()">Button1</button><br/>
<button onclick="twoFunc()">Button2</button><br/>
<button onclick="threeFunc()">Button3</button><br/>
<button onclick="fourFunc()">Button4</button><br/>

</body>
</html>

私の論理がオフの場合、私はそれに対処することができますが、それは何もしません。関数内にアラートを入れて動かしますが、何もしません。この問題は単純なものに違いないと確信しています...

4

3 に答える 3

3

ifステートメントはネストしないでください。passCodeが1の場合、2になることはないので、すでに1を知っているのに、なぜそれをチェックするのですか?また、すべてにonefuncという名前が付けられています。一意の名前を付ける必要があります。

于 2012-06-14T04:02:56.397 に答える
0

関数宣言はすべて同じ名前です。次のようなことを試してください。

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
var passCode = 0;

function oneFuncToRuleThemAll(val)
{
    passCode = val;


  switch (passCode){
     case 1:
        // Do stuff...
        break;
     case 2:
        // Do other stuff...
        break;
     case 3:
        // You get the idea.
        break;
     case 4:
        window.location.href = 'frompassCode.html';
  }
}

</script>
<title> </title>
</head>

<body>

<button onclick="oneFuncToRuleThemAll(1)">Button1</button><br/>
<button onclick="oneFuncToRuleThemAll(2)">Button2</button><br/>
<button onclick="oneFuncToRuleThemAll(3)">Button3</button><br/>
<button onclick="oneFuncToRuleThemAll(4)">Button4</button><br/>

</body>
</html>
于 2012-06-14T04:02:53.543 に答える
0

oneFunc()が複数回宣言され、ifステートメントのロジックが機能しないという事実を除けば、Javascriptが線形に解釈されるという事実が問題です。コードを見ると:

<script type="text/javascript">
var passCode = 0;

function oneFunc()
{
    passCode = 1;
}
function oneFunc()
{
    passCode = 2;
}
function oneFunc()
{
    passCode = 3;
}
function oneFunc()
{
    passCode = 4;
}

if(passCode == 1)
{
    if(passCode == 2)
    {
        if(passCode == 3)
        {
            if(passCode == 4)
            {
                window.location.href = 'frompassCode.html';
            }
        }
    }
}
</script>

このコードは、HTMLドキュメントがブラウザにロードされるときに実行されます。最初に、変数passCodeを0に設定します。次に、すべての関数を宣言します(おそらく問題があります)。次に、関数内にないため、ifステートメントを実行して実行します。関数に含まれていないJavascriptコードは、ページの下ですぐに直線的に実行されます。つまり、ifステートメントが二度と実行されることはありません。ボタンは好きなだけクリックできます。ボタンは明らかにpassCodeの値を変更しますが、ifステートメントはグローバルコードであるため、二度と実行されることはありません。おそらく、ifステートメントを新しい関数に入れ、oneFunc()の呼び出し後に常にその関数を呼び出す必要があります。

于 2012-06-14T04:26:09.270 に答える