1

ユーザーが何かを選択したかどうかをチェックする複数のドロップダウンを持つフォームに取り組んでいます。ほとんどのフィールドは必須であるため、送信をクリックすると、黒のテキストが赤のテキストに置き換えられ、入力する必要があることが示されます。何らかの理由で検証されていないか、私が達成しようとしていることを実行していません。「文学」などの id を持つ他のフィールドは正常に機能しますが、これは機能しません。数値だからでしょうか。

Javascript:

var lit = document.getElementById("012");
var hasLeadLiterature = false;
for (j = 0;) {
    if (lit[j].selected === true) {
        hasLeadLiterature = true;
        break;
    }
}
if (!hasLeadLiterature){
    changeCSS("lbl_literature", "errored");
    ErrorText=ErrorText+"11";
}
------
if (submitcount != 0){
    alert("This form has already been submitted.  Thank you!");
    return;
}

/** Submit form check */
if (ErrorText == ""){
    submitcount++; form.submit();
} else{
    return;
}
------

HTML:

<TR>
        <TD width="30%" valign="middle" ALIGN="left"><LABEL id="lbl_literature" for="lbl_literature" class="normal">How would you prefer to receive<br /> literature?: <SPAN class="required">*</SPAN></LABEL></TD><TD width="70%" valign="top" ALIGN="LEFT">
            <TABLE>
                    <TR>
                        <td class="text_input"> <!-- 012 -->

                            <select id="012" name="012" title="Literature Preference">
                                <option value="None">--None--</option>
                                <option value="Print">Print</option>
                                <option value="Digital">Digital</option>
                            </select>


                        </td>
                    </TR>
            </TABLE>
        </TD>
    </TR>

どんな助けでも大歓迎です!! 前もって感謝します!

4

2 に答える 2

0

あなたの検証は反対の条件をチェックしているようです。見てみましょう:

for (j = 0;) {
    if (lit[j].selected === true) {
        hasLeadLiterature = true;
        break;
    }
}

不要なループ構造を取り除くと、次のようになります。

if (lit[0].selected === true) {
    hasLeadLiterature = true;
}

この場合、要素内lit[0]の最初の空の要素です。したがって、空のオプションが選択されている場合、フォームが検証されるという条件が示されています。その状態を逆転させませんか?このようなもの:optionselect

if (lit[0].selected === false) {
    hasLeadLiterature = true;
}
于 2013-07-22T19:35:35.607 に答える
0

for loop に問題があると思います。何もループしていません。ループしていることを確認しましたか? forループの使用方法について読むことをお勧めします。正しいコードは次のようになります。
for (var i=0; i<lit.length; i++)
このループは無効であるためhasLeadLiterature、コードの性質上、すべてをバイパスすることは決して変更されません。

于 2013-07-22T19:39:14.380 に答える