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>

发生的事情是,当我EntersearchLastName输入文本框中按下键时,两个警报消息框都会弹出。一个显示submitNameSearch,另一个显示submitIDSearchsubmitNameSearch是所需的事件,但submitIDSearch不是,我认为默认情况下它会以某种方式触发。

请问当我在searchLastName输入文本框中按键时,是否有办法摆脱submitIDSearch事件?Enter

非常感谢!

4

1 回答 1

3

当您Enter在表单中按下时,表单将被提交。这就是第二次调用的原因validateForm

两种解决方案:

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 回答