jQuery:按下Enter键时强制特定按钮单击

时间:2015-05-25 13:14:50

标签: jquery click keypress keycode

我有一个文本框,用户可以在其中输入一个类别,当他们按下回车键时,我想使用jQuery点击表单中的特定按钮,但到目前为止这还没有工作,我可以'看到可能导致问题的任何语法错误..它会回发到表单,但是使用不同的(默认)按钮,而不是jQuery代码中的按钮。

$(document).ready(function() {
    $('input#newcategory').keypress(function(e) {
        var KEYCODE_ENTER = 13;
        if (e.keyCode == KEYCODE_ENTER) {
            setTimeout(function() {
                $('input#addnewcategory').click();
            });
            return true;
        }
    });
});

更新: 取出setTimeout修复了问题,虽然我不确定原因。在我的应用程序的其他方面,我需要它,否则它不会强制按钮单击。

        $(document).ready(function() { 
            $('input#newcategory').keypress(function(e) {
                var KEYCODE_ENTER = 13;
                if (e.keyCode == KEYCODE_ENTER) {
                    $('input#addnewcategory').click();
                    return true;
                }
            });
        });

6 个答案:

答案 0 :(得分:0)

你试过了吗?

$(document).ready(function() {
    $('input#newcategory').keypress(function(e) {
        if (e.which == 13) {
            $('input#addnewcategory').trigger("click");
        }
    });
});

答案 1 :(得分:0)

这是我的工作代码

$(document).keyup(function(event) {
    if (event.keyCode == 13) {
        $("#addnewcategory").click();
    }
});

您还可以更改代码以将按键事件放入文档而不是输入#newcategory

答案 2 :(得分:0)

试试这个

$(document).ready(function() {
    $('input#newcategory').keypress(function(e) {
        if (e.which == 13) {
            setTimeout(function() {
                $('input#addnewcategory').click();
            });
            return true;
        }
    });
});

答案 3 :(得分:0)

在文本输入中按Enter键时的默认操作是提交输入所属的表单。因此,在处理按键事件之前,您需要调用

e.preventDefault();

否则表单将在您的处理程序执行之前提交。

答案 4 :(得分:0)

尝试以下代码。

$(document).ready(function() {
    $('input#newcategory').keyup(function(e) {
        var KEYCODE_ENTER = 13;
        if (e.keyCode == KEYCODE_ENTER) {
            setTimeout(function() {
                $('input#addnewcategory').click();
            });
        }
    });
});

$('input#addnewcategory').click(function () {
    return false;
});

答案 5 :(得分:0)

您对setTimeout的来电缺少延迟
显然这不是必需的。 Some sources说这是必需的,other say不是。根据我的测试,它不是必需的(Chrome),但默认为0,所以我仍然建议明确。

setTimeout(function(){}, milliseconds)

关于触发事件:
调用click通常必须来自受信任的事件。我通常将这些描述为“用户驱动的事件”或“需要用户交互的事件”(但这简化了它)。所有浏览器可能都不够智能,无法识别setTimeout内的匿名函数是否来自可信事件,如keypress

  

在Firefox中,如果某个事件由用户调用,则该信件是受信任的,如果该事件由脚本调用,则不受信任。在Internet Explorer中,除了使用createEvent方法创建的事件外,所有事件都是可信任的。

有关Trusted events的更多信息。