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 。
我很欣赏任何想法。感谢。
答案 0 :(得分:47)
我认为你keyup
事件不能preventDefault()
(这是你需要用来阻止浏览器对密钥执行默认操作) - 它被解雇了 后,默认事件已经发生。有关详情,请参阅this page。
如果可以,请考虑改为使用keydown
。
至于停止提交表单,您可以在提交按钮未触发提交时绑定到submit
event和return 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.
});