我最近开始使用<a>
标记作为提交按钮进行样式设置。
我有一个JS编写的插件,用于处理表单及其验证。
要模拟普通表单,用户点击要提交的文本字段,我会检测输入并在密钥表上提交表单。
问题是如果用户点击从Firefox输入自动完成下拉列表,例如,它会检测并仍然尝试提交表单。
有什么想法吗?我可能会切换到我的表单处理程序,在找不到表单的事件时附加一个隐藏的提交按钮....
答案 0 :(得分:1)
您可以观察向上或向下箭头,按下后设置inAutoComplete标志。像这样:
$(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
}
});
});
但是,如果用户在没有自动完成窗口的情况下按下向下箭头,则需要在提交前按两次输入。
您可能需要考虑编写自己的自动填充脚本或使用jQuery autocomplete plugin来获取对自动完成窗口的更多控制权。
答案 1 :(得分:0)
您可以覆盖自动完成行为以将其关闭。
<form autocomplete="off">
</form>
答案 2 :(得分:0)
这样的事情不起作用吗?
var hasFocus = false;
$('#yourAutoCompleteElement').focusin(function () {
hasFocus = true;
});
$('#yourAutoCompleteElement').focusout(function () {
hasFocus = false;
});
$('#yourAtagSubmit').keyUp(function (event) {
if (event.keyCode == ENTER && !hasFocus) {
// submit
}
return;
});
编辑:使用A标签提交按钮真是不好的做法。您应该能够以相同的方式设置常规提交按钮的样式,并且它将适用于所有设备。
答案 3 :(得分:0)
我只是让我的验证插件自动查找提交按钮,如果没有,它会添加它并将其设置为-9999px顶部和左侧,绝对。这样,如果用户点击提交,则采取本机操作。我无法在按钮上使用display:none或某些浏览器无法启动。