输入和弹出列表中的默认按钮

时间:2012-05-21 13:57:57

标签: javascript jquery jsp

我正在尝试实现一个带有多个按钮的表单。当我按回车键时,我想要提交我的默认按钮。来自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。停止传播也不起作用。以下解决方案均未解决此问题

4 个答案:

答案 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';
        }
    });
});

所以当我按下

时执行默认操作