Javascript 如何使用JS捕获html表单上的所有击键?
当光标位于表单内时,是否有方法捕获所有击键。我需要检测ENTER点击,然后模拟TAB点击(光标跳到下一个表单元素)。为什么?人们(会计师)只需使用数字键盘,就可以用一只手输入数据。如果脚本使用jQuery,则:Javascript 如何使用JS捕获html表单上的所有击键?,javascript,html,javascript-events,Javascript,Html,Javascript Events,当光标位于表单内时,是否有方法捕获所有击键。我需要检测ENTER点击,然后模拟TAB点击(光标跳到下一个表单元素)。为什么?人们(会计师)只需使用数字键盘,就可以用一只手输入数据。如果脚本使用jQuery,则: var form = $('someForm'); form.find(':text').on('keyup', function(e) { if (e.which === 13){ form.find(':text[tabindex = ' + (+$(this
var form = $('someForm');
form.find(':text').on('keyup', function(e) {
if (e.which === 13){
form.find(':text[tabindex = ' + (+$(this).prop('tabindex') + 1) + ']').trigger('focus');
}
});
此代码需要每个字段的tabindex属性。例如:
第一个字段:
<input type="text" tabindex="1">
第二个字段:
<input type="text" tabindex="2">
在第一个字段中按Enter键后,焦点将传递到第二个字段。如果脚本使用jQuery,则:
var form = $('someForm');
form.find(':text').on('keyup', function(e) {
if (e.which === 13){
form.find(':text[tabindex = ' + (+$(this).prop('tabindex') + 1) + ']').trigger('focus');
}
});
此代码需要每个字段的tabindex属性。例如:
第一个字段:
<input type="text" tabindex="1">
第二个字段:
<input type="text" tabindex="2">
在第一个字段中按Enter键后,焦点将传递到第二个字段。这是我用来模拟asp.net网格中“Enter”键的代码,其作用类似于“TAB”键:
function handleEnter (field, event) {
var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
if (keyCode == 13) {
var i;
for (i = 0; i < field.form.elements.length; i++){
if (field == field.form.elements[i]) //Find the control's index
break;
}
i++; // Go to next control index
var precField = field.form.elements[i];
if (precField.type == 'text') {
if (field.form.elements[i+1].type == 'hidden' && field.form.elements[i + 2].type!='submit')
handleEnter(field.form.elements[i + 1], event);
else
precField.focus();
}
else if (precField.type != 'hidden')
handleEnter(precField, event);
return false;
}
else
return true;
}
这是我用来在asp.net网格中模拟“Enter”键的代码,类似于“TAB”键:
function handleEnter (field, event) {
var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
if (keyCode == 13) {
var i;
for (i = 0; i < field.form.elements.length; i++){
if (field == field.form.elements[i]) //Find the control's index
break;
}
i++; // Go to next control index
var precField = field.form.elements[i];
if (precField.type == 'text') {
if (field.form.elements[i+1].type == 'hidden' && field.form.elements[i + 2].type!='submit')
handleEnter(field.form.elements[i + 1], event);
else
precField.focus();
}
else if (precField.type != 'hidden')
handleEnter(precField, event);
return false;
}
else
return true;
}
使用JQuery,当按下ENTER键(键代码13)时,您可以模拟一个选项卡(键代码9),如下所示:
$(".input").keyup(function (e) {
if (e.keyCode == 13) {
jQuery.event.trigger({ type : 'keypress', which : 9 });
}
});
使用JQuery,当按下ENTER键(键代码13)时,您可以模拟一个选项卡(键代码9),如下所示:
$(".input").keyup(function (e) {
if (e.keyCode == 13) {
jQuery.event.trigger({ type : 'keypress', which : 9 });
}
});
下面是一些模拟表单中选项卡的jQuery。您需要获取所有
:以与您所在的相同形式输入元素,然后遍历。它还适用于复选框和任何其他:input
捕获的表单元素
演示:
var onkey=函数(e){
如果(e.which==13){
e、 预防默认值();
var指数=-1,
el=这个,
$forms=$(this).closest('form').find(':input').each(函数(i){
如果(此===el){
指数=i+1;
返回false;
}
});
索引<$forms.length?$forms[index].focus():$(el).blur()
}
};
//附加/分离处理程序
$(':input').focus(函数(){
$(此).keypress(onkey);
}).blur(函数(){
$(此).unbind('keypress',onkey);
});
下面是一些模拟表单中选项卡的jQuery。您需要获取所有:以与您所在的相同形式输入元素,然后遍历。它还适用于复选框和任何其他:input
捕获的表单元素
演示:
var onkey=函数(e){
如果(e.which==13){
e、 预防默认值();
var指数=-1,
el=这个,
$forms=$(this).closest('form').find(':input').each(函数(i){
如果(此===el){
指数=i+1;
返回false;
}
});
索引<$forms.length?$forms[index].focus():$(el).blur()
}
};
//附加/分离处理程序
$(':input').focus(函数(){
$(此).keypress(onkey);
}).blur(函数(){
$(此).unbind('keypress',onkey);
});
如果表单设计正确,tab将自动转到下一个输入元素。您还可以设置tabindex
来确定顺序。请参阅@peacemaker:我不认为这是问题所在……当用户点击NUMPAD ENTER键时,他希望模拟选项卡。@FrancisP啊,好的,我误解了OP的要求。如果您正确设计表单,选项卡将自动转到下一个输入元素。您还可以设置tabindex
来确定顺序。请参阅@peacemaker:我不认为这是问题所在……当用户点击NUMPAD ENTER键时,他想模仿选项卡。@FrancisP啊,好吧,我误解了OP的要求。