在验证后将焦点设置为文本框表单元素

时间:2015-05-06 17:52:21

标签: javascript validation asp-classic focus

我在表单上有许多字段,我执行验证,如果验证失败,我想要关注它。验证工作正常,即rtnStr,但焦点()不会落在任何文本框字段,即vCtrl。它保留在“提交”按钮上。

<script language="javascript">

function ValidateForm() {
    var rtnStr = "";
    var vCtrl = "";

    //Contact Details //
    if (document.contactform.txtforename.value == "") {
        rtnStr = rtnStr + " - Please enter your Forename.\n"
        if (vCtrl == "") {
            vCtrl = "txtforename";
        }
    }

    if (document.contactform.txtSurname.value == "") {
        rtnStr = rtnStr + " - Please enter your Surname.\n"
        if (vCtrl == "") {
            vCtrl = "txtSurname";
        }
    }

    if (rtnStr != "") {
        alert(rtnStr)
        window.setTimeout(function () {
            document.getElementById(vCtrl).focus();
        }, 0);
        return false;
    }
    else {
        return true;
    }
}               
</script>

1 个答案:

答案 0 :(得分:0)

问题是vCtrl是一个字符串,它是表单的名称而不是 id ,而document.getElementById(vCtrl).focus()正在寻找。解决这个问题的方法是让vCtrl存储DOM元素而不是文本字符串。

<script  language="javascript">
    function ValidateForm() {
    var rtnStr = "";
    var vCtrl = "";
    //Contact Details //
    if (document.contactform.txtforename.value == "") {
        rtnStr = rtnStr + " - Please enter your Forename.\n"
        if (vCtrl == "") {
            vCtrl = document.contactform.txtforename;
        }
    }

    if (document.contactform.txtSurname.value == "") {
        rtnStr = rtnStr + " - Please enter your Surname.\n"
        if (vCtrl == "") {
            vCtrl = document.contactform.txtSurname;
        }
    }

    if (rtnStr != "") {
        alert(rtnStr)

        vCtrl.focus();

        return false;
    }
    else {
        return true;
    }
}
</script>

jsfiddle