0

私のコードでは、ヘッダー セクションに次の JavaScript コード ブロックがあります。

    function validateForm(bid) {
        switch (bid) {
        case "submitIDSearch":
            alert("submitIDSearch");
            return false;
        case "submitNameSearch":
            alert("submitNameSearch");
            return false;
        }
    }
    function fKeyDown(e) {
        var  kc = window.event ? window.event.keyCode : e.which;
        if (kc == 13) {
            document.getElementById('submitNameSearch').click();
        }
    }

次に、次のHTMLコードブロックがあります

    <form name="checkAbsenceForm" method="post" action="absenceReport.htm" onsubmit="return validateForm(this.submited)">
        <label class="q">ID * <input id="searchRUID" name="searchID" maxlength="9" /></label>
        <input id="submitIDSearch" type="submit" value="Search ID" onclick="this.form.submited = this.id;" />
        <hr />
        <label class="q">First Name <input id="searchFirstName" name="searchFirstName" maxlength="23" onKeyDown="javascript:fKeyDown(event);"/></label>
        <br />
        <label class="q">Last Name * <input id="searchLastName" name="searchLastName" maxlength="23" onKeyDown="javascript:fKeyDown(event);" /></label>
        <input id="submitNameSearch" type="submit" value="Search Name" onclick="this.form.submited = this.id;" />
    </form>

Enter入力テキストボックスでキーを押すとsearchLastName、両方のアラートメッセージボックスがポップアップします。1 つの表示submitNameSearchと他の表示submitIDSearchsubmitNameSearchは望ましいイベントですが、submitIDSearchそうではありません。デフォルトで何らかの形でトリガーされると思います。

searchLastName 入力テキスト ボックスでキーsubmitIDSearchを押したときのイベントを取り除く方法があるかどうか尋ねてもよろしいですか?Enter

どうもありがとう!

4

1 に答える 1

3

フォームを押すEnterと、フォームが送信されます。これが への 2 回目の呼び出しの理由ですvalidateForm

2 つのソリューション:

1)を 削除onKeyDown="javascript:fKeyDown(event);"して、適用時に通常の検証を定義しonsubmit=...ます。

2) に、キー イベントのデフォルトの処理を防止するためfKeyDownに追加します。e.preventDefault();

function fKeyDown(e) {
    var  kc = window.event ? window.event.keyCode : e.which;
    if (kc == 13) {
        document.getElementById('submitNameSearch').click();
        e.preventDefault();
    }
}

しかし、本当にこれだけを で行う場合はfKeyDown、ソリューション 1 で十分です。

于 2012-10-08T14:43:28.317 に答える