javascript - 如果 javascript 验证失败,则聚焦文本字段

标签 javascript focus

我有这段代码:

<html>
    <head>
        <script type="text/javascript">
            function validate(){
                var name=document.frm.name.value;
                if(name.indexOf("A")==0){
                    alert(name);
                }
            }
        </script>
    </head>
    <body>
        <form name="frm" action="test.php">
            Enter name:<input type="text" name="name" onblur="validate()"/>
            Enter e-Mail:<input type="text" name="email" onblur=""/>
            <input type="submit"/>
        </form>
    </body>
</html>

在上面的代码中,我试图在失去焦点时验证文本字段。如果名称以 A 开头,脚本工作正常。但我想如果用户输入不以 A 开头的不同名称,它会将焦点返回到文本字段 name。为此,我编写了这个脚本:

<script type="text/javascript">
    var name = document.frm.name.value;
    if(name.indexOf("A") == 0){
        alert(name);
    }else{
        document.frm.name.focus();
    }
</script>

然后就不行了。

任何人都可以提供帮助,我应该怎么做才能请求文本字段 name 的焦点?
我对 javascript 了解不多。

最佳答案

只需为您的表单提供一个 id 并使用 document.getElementById('form_id') 引用它。十多年前,在此上下文中使用 name 属性已被弃用。此外,inputname 应该是 "name" 之外的其他内容,而应使用 username 或 sth。

HTML:

<form id="frm" action="test.php">
    Enter name:<input type="text" name="username" id="username" onblur="validate()"/>
    Enter e-Mail:<input type="text" name="email" id="email" onblur=""/>
</form>

JavaScript:

function validate(){
    var form = document.getElementById('frm');
    if (form.username.value.indexOf("A") === 0) {
        alert(name);
    } else {
        form.username.focus();
    }
}

除了检索 formid 之外,您还可以将 form 传递给 validate()作为参数:onblur="validate(this);"。然后在事件处理程序中将该参数用作 form:

function validate(form){
    if (form.username.value.indexOf("A") === 0) {
        alert(name);
    } else {
        form.username.focus();
    }
}

编辑

Focus 似乎没有延迟工作,你可以试试这个(input 有一个 id="username"):

function focusTo (elm) {
    elm.focus();
    return;
}

function validate(){
    var form = document.getElementById('frm');
    if (form.username.value.indexOf("A") === 0) {
        alert(name);
    } else {
        alert('error');
        setTimeout(function () {focusTo(form.username);}, 10);
    }
}

关于javascript - 如果 javascript 验证失败,则聚焦文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14974803/

相关文章:

css - 将 CSS 样式添加到除焦点文本区域之外的所有内容

flutter - 如何将焦点转移到 Flutter 中的下一个 TextField?

javascript - 从窗口外返回时出现模糊和焦点问题

javascript - 为什么 <p> 没有被插入到我的 html 中?

javascript - Reactjs:无限滚动不起作用

javascript - 在 dragover 上更改 div 的背景

javascript - React Native 将图像保存到特定位置

android - 使用 Android GridView 的键盘导航不会滚动网格

html - 如何模仿焦点上的橙色轮廓?

javascript - 火狐插件 SDK : Babel support