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

set focus to textbox form element following Validation

我在执行验证的表单上有许多字段,如果验证失败,我想关注这些字段。验证工作正常,即 rtnStr,但 focus() 不会落在任何文本框字段上,即 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>

问题是 vCtrl 是一个字符串,它是表单的 name 而不是 document.getElementById 的 id (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