Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms Javascript焦点事件转到下一个表单字段_Forms_Focus - Fatal编程技术网

Forms Javascript焦点事件转到下一个表单字段

Forms Javascript焦点事件转到下一个表单字段,forms,focus,Forms,Focus,我对Javascript相当陌生,有一个基本问题。我有一个带有名字和姓氏输入字段的HTML表单。我在标题中有下面的Javascript代码,但是在代码运行之后,焦点转到下一个字段(姓氏)。这是为什么?我该如何纠正它 多谢各位 <script> function validateForm() { valid = true; //validate first name if (doc

我对Javascript相当陌生,有一个基本问题。我有一个带有名字和姓氏输入字段的HTML表单。我在标题中有下面的Javascript代码,但是在代码运行之后,焦点转到下一个字段(姓氏)。这是为什么?我该如何纠正它

多谢各位

<script>
        function validateForm()
        {
            valid = true;

            //validate first name
            if (document.contactform.first_name.value == "")
            {
                //alert user first name is blank
                alert("You must enter a first name");
                document.getElementById("first_name").focus();
                return false;
            }
            return valid;
        }
    </script>   

函数validateForm()
{
有效=真;
//验证名字
如果(document.contactform.first\u name.value==“”)
{
//警报用户名为空
警报(“您必须输入名字”);
document.getElementById(“first_name”).focus();
返回false;
}
返回有效;
}
表单字段代码为:
input type=“text”name=“first\u name”id=“first\u name”maxlength=“50”size=“30”onBlur=“validateForm()”

解决方法是增加一点延迟。。像这样:

setTimeout(function() {
    document.getElementById('first_name').focus()
}, 10);
以下是您在JSFIDLE中使用此修复程序的示例:


这似乎是一个常见的Firefox问题。。我不知道确切的原因,但这与Firefox在DOM完全加载之前加载javascript有关。。换句话说,getElementById('first_name')返回null。但添加轻微延迟可以解决此问题。

谢谢。我知道代码是如何工作的,但是是否有一种通用的方法将用户返回到调用函数的字段?如果有8个或10个字段,并且您正在验证每个字段,那么这将是冗余代码。谢谢。不幸的是,我还没有找到任何其他修复方法。但是我确实发现setTimout实际上可以设置为0,而不是10(正如上面代码中所示),并且它仍然有效。您还可以查看以下内容: