Javascript 如何检测用户是否在文本字段上使用自动完成?

Javascript 如何检测用户是否在文本字段上使用自动完成?,javascript,Javascript,我最近开始使用标记作为提交按钮,以进行样式设置。 我编写了一个JS插件,用于处理表单及其验证 为了模拟一个正常的表单,用户点击文本字段上的enter键进行提交,我在keyup上检测enter和submit表单 问题是,例如,如果用户在Firefox的自动完成下拉列表中点击enter,它会检测到并仍然尝试提交表单 有什么想法吗?如果找不到表单的“提交”按钮,我可能会切换到我的表单处理程序,并附加一个隐藏的“提交”按钮。…您可以覆盖“自动完成”行为以将其关闭 <form autocomplet

我最近开始使用
标记作为提交按钮,以进行样式设置。 我编写了一个JS插件,用于处理表单及其验证

为了模拟一个正常的表单,用户点击文本字段上的enter键进行提交,我在keyup上检测enter和submit表单

问题是,例如,如果用户在Firefox的自动完成下拉列表中点击enter,它会检测到并仍然尝试提交表单


有什么想法吗?如果找不到表单的“提交”按钮,我可能会切换到我的表单处理程序,并附加一个隐藏的“提交”按钮。…

您可以覆盖“自动完成”行为以将其关闭

<form autocomplete="off">

</form>

您可以查看向上或向下箭头,按下后设置一个不完整完成标志。大概是这样的:

$(document).ready(function() {
    var autoCompleteActive = false;

    $(document).keydown(function(e) {
        switch (e.keyCode) {
            case 38:
            case 40: autoCompleteActive = true; 
            break;
            default: autoCompleteActive = false;
            break;
        }

        if(e.keyCode==13 && !autoCompleteActive) {
            //do your onEnter stuff
        }
    });
});
但是,如果用户在没有弹出“自动完成”窗口的情况下按下向下箭头,则需要在提交前按enter键两次


您可能想考虑编写自己的AutoScript或使用它来获得对自动完成窗口的更多控制。

< P>这样的事情不会奏效吗?< /P>
    var hasFocus = false;
    $('#yourAutoCompleteElement').focusin(function () {
       hasFocus = true;
    });

    $('#yourAutoCompleteElement').focusout(function () {
       hasFocus = false;
    });

    $('#yourAtagSubmit').keyUp(function (event) {
        if (event.keyCode == ENTER && !hasFocus) {
           // submit
        }

        return;
    });

编辑:使用标签提交按钮是非常糟糕的做法。您应该能够以相同的方式设置常规提交按钮的样式,它将在所有设备上工作。

我只是让我的验证插件自动查找提交按钮,如果没有提交按钮,它将添加该按钮,并将其样式设置为-9999px top and left,绝对。这样,如果用户点击submit,就会执行本机操作。我不能只使用显示:按钮上没有显示,或者某些浏览器无法启动。

事实上,正在使用的是,默认情况下它不工作。这就是为什么我认为我们的插件会自动添加一个隐藏提交。这就解决了。在你的keyUp侦听器中,你不能检测下拉列表是否有焦点并相应地采取行动吗?@mattacular你不需要将焦点放在元素上才能触发keyUp事件吗?“我最近开始使用标记作为提交按钮来进行样式设置。”-每当有人这样做时,小猫就会失去它所有的皮毛。如果你想设计样式,可以使用
按钮
,尽管使用锚定标签并不可怕。。。使用正确的标签对于跨多个浏览器和设备查看非常重要。我在工作中遇到了一些问题,但我会尝试这个解决方案。虽然我可能会取消enter键侦听器,而选择放置一个隐藏的submit按钮,这样做会更有效,但我认为这样做需要更少的努力。