1

次のスクリプトは、ユーザーがドロップダウン ボックスで行った選択に応じて、特定の入力フィールドのみを検証する必要があります (var 問題)。

私が抱えている問題は、 if ステートメントが問題 == 4 (以下) に対して実行され、ユーザーが対応する cityid フィールドに入力した場合、次の if ステートメント (問題 == 5) のアラート (Alert#3) が発生することです。引き金になった。ユーザーがドロップダウンから問題== 5を選択し、モデルフィールドに入力していない場合にのみ、アラート#3をトリガーしたい。

問題 == 5 に対して if 文を実行すると、それぞれ同じ問題が発生します。

function ValidateSOR()
{

    var user = document.SOR.User;
    var problem= document.SOR.Problem;
    var cityid = document.SOR.CityID;
    var errors1 = document.SOR.ErrorCodes1;
    var model = document.SOR.Model;
    var errors2 = document.SOR.ErrorCodes2;
    var software = document.SOR.SoftwareType;

    if (user.value == "")
    {
        window.alert("Please enter your name.");
        user.focus();
        return false;
    }

    if (problem.selectedIndex < 1)
    {
        alert("Alert#1");
        problem.focus();
        return false;
    }

    if (problem.selectedIndex == 4) 
    {
        cityid.focus();
    }
        else if (cityid.value == "")
    {
        alert("Alert#2");
        cityid.focus();
        return false;
    }

    if (problem.selectedIndex == 5) 
    {
        model.focus();
    }
        else if (model.value == "")
    {
        alert("Alert#3");
        model.focus();
        return false;
    }

    if (problem.selectedIndex == 6) 
    {
        software.focus();
    }
        else if (software.value == "")
    {
        alert("Alert#4");
        software.focus();
        return false;
    }

    return true;
}
4

2 に答える 2

3

問題が#4であることがわかったとき、関数から戻っていません。したがって、4 であるため5ではないため、その分岐の「else」部分が使用されます。

edit — OK、コードを見てみましょう:

if (problem.selectedIndex == 4) {
    cityid.focus();
}
else if (cityid.value == "") {
    alert("Alert#2");
    cityid.focus();
    return false;
}

if (problem.selectedIndex == 5) {
    model.focus();
}
else if (model.value == "") {
    alert("Alert#3");
    model.focus();
    return false;
}

インデックスが 4 の場合、どうなりますか? このコードは次のように実行されます。

  cityid.focus();

じゃあ何?ifコードは次のステートメントに進みます。

if (problem.selectedIndex == 5) {

さて、インデックスが 4 であることに気付いた場合、インデックスが 5 になる確率はどれくらいでしょうか? ゼロ!したがって、その比較は であることが保証されているfalseので、その部分に移動しelseます。どうやら、「model.value」は空の文字列であるため、そのifステートメントは成功します。アラートが表示されます。

コードのロジックを検証プロセスのロジックとより一致させることで、問題が解決されると思います。

if (problem.selectedIndex == 4 || cityid.value == "") {
  cityid.focus();
  return false;
}

そうすれば、インデックスが 4 の場合、または都市 ID の値が空の場合、都市 ID のエラーとして処理し、関数を終了します。returnその時点で関数を終了するため、その後に何が起こるかは問題ではありません。

于 2013-07-17T17:45:32.940 に答える
1

次のように各 IF を再構築する必要があります。

if (problem.selectedIndex == 4 || cityid.value == "") 
{
    cityid.focus();
    return false;
}

if (problem.selectedIndex == 5 || model.value == "") 
//and so on

ifどちらの方法でも戻り、次のステートメントにヒットしません

于 2013-07-17T18:03:14.127 に答える