JQuery:Keyup,如何防止箭头的默认行为(向上和向下)并输入密钥?

时间:2011-06-02 20:57:16

标签: javascript jquery onkeyup enter

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

我很欣赏任何想法。感谢。

5 个答案:

答案 0 :(得分:47)

我认为你keyup事件不能preventDefault()(这是你需要用来阻止浏览器对密钥执行默认操作) - 它被解雇了 后,默认事件已经发生。有关详情,请参阅this page

如果可以,请考虑改为使用keydown

至于停止提交表单,您可以在提交按钮未触发提交时绑定到submit eventreturn false;(有关如何确定此信息,请参阅jQuery: how to get which button was clicked upon form submission?

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

$('form').keypress(function(e){
    if(e.which === 13){
        return false;
    }
});

答案 1 :(得分:0)

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

,而不是中断

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

此外,$('form').submit(function() {return false});会完全停止提交,但我不确定您的目标是什么?

答案 2 :(得分:0)

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

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

答案 3 :(得分: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;
  }
});

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

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

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

答案 4 :(得分: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.
});