1

私はいくつかのjavascriptに奇妙な問題があります。次のコードでは、ブラウザーは if、else if、else if 条件で複数のパスを実行します。たとえば、コンソールは「a c」または「b c」をログに記録します。

if (divs[i].row == hover_div.row && divs[i].obj != hover_div.obj)
{
    console.log("a");
    divs[i].obj.stop()
        .animate({'width':d_thin}, { duration:600, queue:false })
        .animate({'height':d_expand}, { duration:600, queue:false });
}
else if (divs[i].col == hover_div.col && divs[i].obj != hover_div.obj)
{
    console.log("b");
    divs[i].obj.stop()
        .animate({'width':d_expand}, { duration:600, queue:false })
        .animate({'height':d_thin}, { duration:600, queue:false });
}
else if (divs[i].obj != hover_div.obj);
{
    console.log("c");
    divs[i].obj.stop()
        .animate({'width':d_thin}, { duration:600, queue:false })
        .animate({'height':d_thin}, { duration:600, queue:false });
}

ブロックのすぐ外側にカウンターを追加して、コードが 2 回実行されていないことを確認しました。以下のように if ステートメントをネストすると、全体が正常に機能しますが、そうする必要はありません。

if (divs[i].row == hover_div.row && divs[i].obj != hover_div.obj)
{
    console.log("a");
    divs[i].obj.stop()
        .animate({'width':d_thin}, { duration:600, queue:false })
        .animate({'height':d_expand}, { duration:600, queue:false });
}
else {
    if (divs[i].col == hover_div.col && divs[i].obj != hover_div.obj)
    {
        console.log("b");
        divs[i].obj.stop()
            .animate({'width':d_expand}, { duration:600, queue:false })
            .animate({'height':d_thin}, { duration:600, queue:false });
    }
    else {
        if (divs[i].obj != hover_div.obj);
        {
            console.log("c");
            divs[i].obj.stop()
                .animate({'width':d_thin}, { duration:600, queue:false })
                .animate({'height':d_thin}, { duration:600, queue:false });
        }
    }
}
4

2 に答える 2

14
else if (divs[i].obj != hover_div.obj); // <--

セミコロンを削除

于 2012-04-23T12:59:54.653 に答える
4

この行の末尾にセミコロンがあります:

else if (divs[i].obj != hover_div.obj);

これは、次のように言っているのと同じです:

else if (...) {
   // do nothing
}

{
   console.log("c");
   ...
}

したがって、ブロック c は常に実行されます。

于 2012-04-23T13:01:00.410 に答える