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按钮,这样做会更有效,但我认为这样做需要更少的努力。