javascript - 如何检测整个表单是否失焦?

标签 javascript jquery html forms focus

我有一个文本表单,其中包含姓名输入字段和电子邮件输入字段。在移动网站上,当用户单击某个字段时,它将被带到视口(viewport)的顶部,键盘位于其下方。但是,当取消选择任一文本字段时,它会卡在此处并且不会重置。

我发现 jquery focusOut 事件可以重置页面缩放,但是只要任一字段未聚焦(即,当名称字段处于事件状态而电子邮件未处于事件状态时),就会触发该事件。如何检测何时没有输入字段处于焦点状态?

现在我的表单代码是:

<form class="form-signin" action="http://" method="post" id="subForm" onsubmit="movedrop()"> 
        <input type="text" class="form-control" id="fieldName" name="cm-name" placeholder="Full Name" tabindex=1 required>
        <label for="inputEmail" class="sr-only">Email address</label>
        <input type="email" id="fieldEmail" name="cm-hjjhkh-hjjhkh" class="form-control" placeholder="Email" tabindex=2 required>
        <button class="btn btn-lg btn-white btn-block subscribe" id="click-subscribe" type="submit" tabindex=3>SUBSCRIBE</button>
</form>

和我的 JavaScript:

$("form").focusout(function() {
document.body.scrollTop = 0;
console.log("focus out");
})

每次取消选择任一字段时都会触发该事件。我希望它在没有选择任何一个时触发。

最佳答案

您需要检查其他成员是否同时处于事件状态。 Focusout 只是告诉您某个输入字段何时失去焦点。

尝试以下代码:

$("form").focusout(function() {
    var anyActive = false;
    $.each($(this).find(':input'), function(index, inputField){
        if($(inputField).is(':active')){
            anyActive = true;
        }
    });
    if(anyActive){
        $('#focusBox').html('One is active');
    } else {
        $('#focusBox').html('None is active');
    }
    document.body.scrollTop = 0;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form class="form-signin" action="http://" method="post" id="subForm" onsubmit="movedrop()"> 
        <input type="text" class="form-control" id="fieldName" name="cm-name" placeholder="Full Name" tabindex=1 required>
        <label for="inputEmail" class="sr-only">Email address</label>
        <input type="email" id="fieldEmail" name="cm-hjjhkh-hjjhkh" class="form-control" placeholder="Email" tabindex=2 required>
        <button class="btn btn-lg btn-white btn-block subscribe" id="click-subscribe" type="submit" tabindex=3>SUBSCRIBE</button>
</form>

<div id="focusBox"></div>

关于javascript - 如何检测整个表单是否失焦?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36142904/

相关文章:

javascript - 通过正则表达式从字符串中提取 URL

javascript - 我想在范围内放置一个文本框

jquery - 多个下拉切换

Javascript RegExp-仅当A在X之前且B在X之后时如何匹配X

javascript - 列表项中的表单值

javascript - 如何选择和比较 JSON 数据的值(value)?

javascript - 如何为动态制作的复选框列表制作撤消按钮

javascript - 使用 jQuery 打开和关闭类

javascript - 根据数据对 div 进行排序

php - 使用 "variable"包装类输出 HTML