如何在文本框中获取 Enter 键以触发功能而不是第一个/默认按钮

Posted

技术标签:

【中文标题】如何在文本框中获取 Enter 键以触发功能而不是第一个/默认按钮【英文标题】:How to get the Enter key within a textbox to trigger a function and not the first/default button 【发布时间】:2012-06-15 15:16:34 【问题描述】:

我试图让 Enter 键在某个文本框内被按下时触发一个功能,而不是触发第一个或默认按钮。

您可以在此处查看正在发生的事情的示例:http://jsfiddle.net/cutsomeat/WZ6TM/1/

如果你按下其他键,你会得到一个带有键码的警告框,但如果你按下 Enter 键,你将不会得到带有键码的警告框,而是按钮点击事件中的警告框。

显然 Enter 键是触发按钮。有没有办法避免这种情况,而是在 keyup 事件中捕获 Enter 键,然后触发另一个函数?

【问题讨论】:

【参考方案1】:

试试这个:

$('#myText').on("keypress", function(e) 
        if (e.keyCode == 13) 
            alert("Enter pressed");
            return false; // prevent the button click from happening
        
);

Demo

【讨论】:

.live() 现已贬值。请改用.on() 最好使用bind() 而不是on() 或更糟糕的live() 使用on()bind() 现已折旧。【参考方案2】:
$(document).ready(function() 

    $('#myText').keypress(function(e) 
        if ( e.keyCode == 13 )   // detect the enter key
            $('#myButton').click(); // fire a sample click,  you can do anything
        
    );

    $('#myButton').click(function(e) 
        alert('Button click activated!');
    );

);

DEMO

对于实时元素,请使用.on(),如下所示:

$(document).ready(function() 

    $(document).on('keypress', '#myText', function(e) 

        if ( e.keyCode == 13 )   // detect the enter key
            $('#myButton').click(); // fire a sample click,  you can do anything
        
    );

    $(document).on('click', '#myButton', function(e) 
        alert('Button click activated!');
    );

);

【讨论】:

我很想对此 +1,但你真的应该解释为什么 keyup 比 keydown/keypress 更好【参考方案3】:

在 keyDown 中执行e.preventDefault() 以避免按钮的默认操作:

$('#myText').keydown(function(e) 
    if (e.keyCode == 13) 
        e.preventDefault();
    
    alert(e.keyCode);
);

【讨论】:

把 if (e.keyCode = 13) 改成 if (e.keyCode == 13)【参考方案4】:

使用.on(),因为.live() 一直是deprecated。

$(document).on("keypress", ".myText", function(e) 
     if (e.which == 13) 
         //do some stuff
     
);

【讨论】:

以上是关于如何在文本框中获取 Enter 键以触发功能而不是第一个/默认按钮的主要内容,如果未能解决你的问题,请参考以下文章

在文本框中按 Enter 时如何触发 HTML 按钮?

文本框中,回车键触发事件的js代码[多浏览器兼容]

C#:如何在文本框中按下输入触发按钮,但仍允许“Ctrl + A”等快捷方式通过?

如何在 keydown 事件后在文本框中按 enter 删除虚拟键盘

函数在需要时触发。我应该如何解决这个问题?

从嵌套 recyclerview 的所有输入框中获取所有编辑文本正在获取最新的 recyclerview 项目而不是所有数据