我正在尝试实现一个带有多个按钮的表单。当我按回车键时,我想要提交我的默认按钮。来自http://greatwebguy.com/programming/dom/default-html-button-submit-on-enter-with-jquery/的此代码通常有效:
$(function() {
$("form input").keypress(function (e) {
if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
$('button[type=submit].default').click();
return false;
} else {
return true;
}
});
});
...但 当我输入输入字段时,我有一个自动完成弹出窗口,所以当我在此弹出窗口中输入时,我希望将此值放入输入字段,而不是提交所有表单。我能否以某种方式检查此输入是否来自弹出窗口?或者我应该尝试这样做?
编辑: 我想我没说清楚。这个弹出窗口不是jquery的任何部分。它是标准弹出窗口,将以前输入的数据显示在输入中。所以它没有任何课程或ID。停止传播也不起作用。以下解决方案均未解决此问题
答案 0 :(得分:0)
您可以使用:visible
查看自动填充的下拉列表div
是否已打开,然后阻止代码的回车键操作完成。像这样:
$("form input").keypress(function(e) {
var key = e.which || e.keyCode;
if (key == 13 && !$(".autocomplete").is(":visible")) {
e.preventDefault();
$('form').submit();
}
});
你也可以在自动完成功能的输入键上使用event.stopPropagation()
,但是你可能需要手动修改源码,这是不理想的。
答案 1 :(得分:0)
在return false;
之前
写
e.preventDefault();
或/和
e.stopPropagation();
答案 2 :(得分:0)
$("form input").keypress(function (e) {
if (e.target.id !== "autoCompliteId" && ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13))) {
$('button[type=submit].default').click();
return false;
} else {
return true;
}
});
答案 3 :(得分:0)
我修改了我的代码,现在可以正常工作了。 我在命令中有一个名为Operation的枚举,我在每个提交按钮之前设置了不同的字段值,例如:
<input type="submit" value="do sth" onclick="setOperationAndSubmit('DO_STH')"/>
<input type="submit" value="next" onclick="setOperationAndSubmit('DEFAULT')"/>
function setOperationAndSubmit(operation) {
if (document.myForm.elements['operation'].value === '') {
document.myForm.elements['operation'].value = operation;
}
document.myForm.submit();
}
然后我有我的动作,听取按键,并在每个回车键上设置适当的操作:
$(function() {
$("form input").keypress(function(e) {
if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
document.myForm.elements['operation'].value = 'DEFAULT';
}
});
});
所以当我按下
时执行默认操作