如何禁用文本框中的回车键?

25
<form name='qform'>
<textarea name='q' rows='3' cols='60' wrap='hard' id='q' onkeydown="if (event.keyCode == 13) document.getElementById('clickit').click()"></textarea>
<input type='button' value='search' id='clickit' onclick="get();">
</form>

我有一个表单... 它没有提交按钮,因为我正在使用jQuery,在这个表单下面是一个显示结果的div区域。它是一个没有输入框而是文本区域的搜索引擎,这是因为它将成为一个多词搜索器。

问题是如果我按下回车键,查询就会被提交,一切都没问题... 但文本区域的焦点会下移一行,这对我来说是个问题。

基本上,我希望回车键只有一个功能(提交),而没有其他任何东西。


1
提交后,您可以将焦点放回文本区域。但是,如果用户单击“搜索”按钮,焦点不会自动转移到按钮上吗? - RobG
这个回答解决了你的问题吗?按下ENTER键时禁用Textarea中的新行 - Alain Cruz
4个回答

23
$(document).ready(function() {

    $('textarea').keypress(function(event) {

        if (event.keyCode == 13) {
            event.preventDefault();
        }
    });
});

keyCode已被弃用。为了符合标准,请使用event.key === "Enter"代替。 - Marcel Waldvogel

15

如果你不想要多行文本输入,为什么不直接使用<input type="text">?你提到它将是一个“多单词搜索器”。为什么需要<textarea>

更新

试试这个

$('textarea').bind('keypress', function(e) {
  if ((e.keyCode || e.which) == 13) {
    $(this).parents('form').submit();
    return false;
  }
});

6
为了防止DOM中有更高级别的键盘绑定,你可能需要将return false;更改为e.preventDefault() - qwertymk
如果您不想要那些绑定,是的 :) - Michael Mior
原因:我正在发送短信,它们不能有换行符,但同时我又不希望文本框的显示向右滚动——因此使用文本区域是合适的。 - Andy
@Andy 假设你在谈论短信,换行通常是允许的。 - Michael Mior

13
在jquery函数中,使用event.preventdefault然后做你想做的事情。 例如
<script>
$("a").click(function(event) {
  event.preventDefault();
//Do your logic here
});
</script>

http://api.jquery.com/event.preventDefault/


很好。这对我帮助很大!谢谢! - www139

0

纯 JavaScript:

document.addEventListener('keypress', function (e) {
    if (e.keyCode === 13 || e.which === 13) {
        e.preventDefault();
        return false;
    }

})


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接