16

JavaScript (JQuery)

$('input').keyup(function(e)
{
    var code = e.keyCode ? e.keyCode : e.which;

    switch(code)
    {
        case 38:
        break;

        case 40:
        break;

        case 13:
        break;

        default:
        return;
     }
 });

HTML

<form method="post" action="/">
<input type="text" name="text" />
<button type="submit">Submit</button>
</form>

我有两个问题:

1)当我按下向上箭头键时,插入符号不应该移动。

例如,在 Chrome 中,当我按下向上键时,它会将插入符号向左移动。但我只在 Chrome 中遇到这个问题。它在 FF 中运行良好。

2)当我按下回车键时,我不想提交表单。

顺便说一句,我想让它与keyup而不是keypress一起使用。

我会很感激任何想法。谢谢。

4

5 回答 5

51

我认为你不能preventDefault()(这是你需要用来阻止浏览器对某个键执行默认操作的方法)keyup——它在默认事件已经发生后被触发。有关更多信息,请参阅此页面

如果可以,请考虑keydown改用。

至于停止提交表单,您可以绑定到submit事件以及return false;提交按钮未触发提交时(请参阅jQuery:如何获取表单提交时单击了哪个按钮?如何确定这一点)。

另一方面,您也可以绑定到keypress表单,并在Enter按下时以相同的方式取消提交(未经测试的代码):

$('form').keypress(function(e){
    if(e.which === 13){
        return false;
    }
});
于 2011-06-02T21:02:35.407 回答
0

您可以尝试返回 false 或使其调用函数并使用http://api.jquery.com/event.preventDefault/而不是 break

例如:case 40: function(e) {e.preventDefault;}

此外,$('form').submit(function() {return false});会完全停止提交,但我不确定这就是你所追求的?

于 2011-06-02T21:03:48.700 回答
0

为了防止在用户按下回车时提交表单,您需要绑定表单的提交功能,如果事件触发是按下回车按钮,则返回 false。

对于向上/向下按钮按下,使用e.preventDefault();

于 2011-06-02T21:03:49.480 回答
0

最可靠的方法是结合e.preventDefault(),e.stopPropagation()return false;

下面是它的样子:

var override_keys = [13, 38, 40];

$('input').keyup(function(e){
  var code = e.keyCode ? e.keyCode : e.which;

  if ($.inArray(code, override_keys)) {
    e.preventDefault();
    e.stopPropagation();
    return false;
  }
});

此外,为了防止使用 enter 键提交表单,您应该检查表单的submit事件:

$('#form').submit(function(e){
  var code = e.keyCode ? e.keyCode : e.which;

  if ($.inArray(code, override_keys)) {
    return false;
  }
});
于 2011-06-02T21:17:48.770 回答
0

看起来您实际上可以在使用 keyup(); 时停止“ENTER”的默认设置;... jQuery api 在这里自己写:http: //api.jquery.com/keyup/

以下是您必须执行的操作:

$('textarea').keyup(function(e) {
   // your code here
}).keydown(function(e){
   // your e.which for ENTER.
});
于 2012-08-28T14:21:31.740 回答