Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery:按下Enter键时强制特定按钮单击_Jquery_Click_Keypress_Keycode - Fatal编程技术网

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

jQuery:按下Enter键时强制特定按钮单击,jquery,click,keypress,keycode,Jquery,Click,Keypress,Keycode,我有一个文本框,用户可以在其中输入类别,当他们按enter键时,我想使用jQuery来单击表单中的特定按钮,但到目前为止,这不起作用,而且我看不到任何可能导致问题的语法错误。。它将发回表单,但使用不同的默认按钮,而不是jQuery代码中的按钮 $(document).ready(function() { $('input#newcategory').keypress(function(e) { var KEYCODE_ENTER = 13; if (e.k

我有一个文本框,用户可以在其中输入类别,当他们按enter键时,我想使用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;
                }
            });
        });
您是否尝试过:

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

这是我的工作代码

$(document).keyup(function(event) {
    if (event.keyCode == 13) {
        $("#addnewcategory").click();
    }
});
您还可以更改代码,将按键按钮事件置于文档中,而不是inputnewcategory

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

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

e.preventDefault();
否则,表单将在处理程序执行之前提交。

请尝试下面的代码

$(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;
});
您对setTimeout的调用缺少延迟: 显然这不是必需的。说它是必需的,它不是。根据我的测试,它不是必需的,但它默认为0,所以我仍然建议明确

setTimeout(function(){}, milliseconds)
关于触发事件: 调用单击通常必须来自受信任的事件。我通常将其描述为用户驱动的事件或需要用户交互的事件,但这样可以简化它。所有浏览器可能都不够聪明,无法识别setTimeout中的匿名函数是由可信事件(如按键)触发的

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


更多关于。

if e.keyCode==keyCode\u ENTER{}部分是否运行?或者问题是否存在于$'inputaddnewcategory'。单击;另外,为什么需要setTimeOut?e.keyCode==keyCode_ENTER{}在添加警报时起作用。超时是因为在没有按钮的情况下强制单击按钮时遇到问题;接受它并不能解决问题。您的$'inputaddnewcategory'单击事件处理程序中有什么?