0

我正在尝试实现一个带有多个按钮的表单。当我按下回车键时,我希望提交我的默认按钮。来自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;
    }
});

});

但是...当我在输入字段中输入时,我有一个自动完成弹出窗口,所以当我在此弹出窗口中按 Enter 时,我希望将此值放入输入字段,而不是提交所有表单。我可以以某种方式检查此输入是否来自弹出窗口吗?或者我应该尝试以不同的方式做这件事?

编辑:我想我没有说清楚。此弹出窗口不是 jquery 的任何部分。它是标准弹出窗口,可将先前键入的数据显示到输入中。所以它没有任何类或id。停止传播也不起作用。以下解决方案均不能解决此问题

4

4 回答 4

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()在自动完成功能中使用回车键,但是您可能必须手动修改源代码,这并不理想。

于 2012-05-21T14:03:05.247 回答
0

return false;

e.preventDefault();

或/和

e.stopPropagation();

于 2012-05-21T14:03:32.267 回答
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;
                }
            });
于 2012-05-21T14:08:54.787 回答
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';
        }
    });
});

所以当我按回车时执行默认操作

于 2012-05-22T13:34:37.660 回答