我需要一个jQuery的解决方案,我觉得已经接近了,还需要做什么?
$('html').bind('keypress', function(e)
{
if(e.keyCode == 13)
{
return e.keyCode = 9; //set event key to tab
}
});
我可以返回false并防止按下回车键,我以为只需要将keyCode更改为9就可以将其变成制表符,但似乎行不通。我已经接近了答案,发生了什么事?
我需要一个jQuery的解决方案,我觉得已经接近了,还需要做什么?
$('html').bind('keypress', function(e)
{
if(e.keyCode == 13)
{
return e.keyCode = 9; //set event key to tab
}
});
我可以返回false并防止按下回车键,我以为只需要将keyCode更改为9就可以将其变成制表符,但似乎行不通。我已经接近了答案,发生了什么事?
$('input').on("keypress", function(e) {
/* ENTER PRESSED*/
if (e.keyCode == 13) {
/* FOCUS ELEMENT */
var inputs = $(this).parents("form").eq(0).find(":input");
var idx = inputs.index(this);
if (idx == inputs.length - 1) {
inputs[0].select()
} else {
inputs[idx + 1].focus(); // handles submit buttons
inputs[idx + 1].select();
}
return false;
}
});
live
已被jQuery正式“废弃”,现在您必须使用on
。请查看我的答案,了解如何使用on
实现它 ;) - Kamran Ahmed这个完美运作!
$('input').keydown( function(e) {
var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
if(key == 13) {
e.preventDefault();
var inputs = $(this).closest('form').find(':input:visible');
inputs.eq( inputs.index(this)+ 1 ).focus();
}
});
$('input').keydown(...
是 $('input').on("keypress"...
的简写形式。它们是一样的东西。你有证据吗? - azerafati为什么不做些像这样简单的事情呢?
$(document).on('keypress', 'input', function(e) {
if(e.keyCode == 13 && e.target.type !== 'submit') {
e.preventDefault();
return $(e.target).blur().focus();
}
});
这样,除非您已经将焦点集中在“提交”输入类型上,否则不会触发提交,而且它会把您带回到离开的地方。这还使其适用于动态添加到页面上的输入。
注意:对于任何可能具有“失去焦点”事件侦听器的人,blur()位于focus()之前。这不是必要的过程。
(e.keyCode == 13) || (e.keyCode == 3)
。 - Risinekgit clone --recursive git://github.com/joelpurra/plusastab.git
- Joel Purratabindex
是被设计忽略的 - 请参见SkipOnTab versus tabindex。应该从PlusAsTab和EmulateTab编写类似的内容或链接到该页面。 - Joel Purra$("#form").enterAsTab({ 'allowSubmit': true});
如果提交按钮正在处理事件,这将允许按回车键提交表单。(function( $ ){
$.fn.enterAsTab = function( options ) {
var settings = $.extend( {
'allowSubmit': false
}, options);
this.find('input, select').live("keypress", {localSettings: settings}, function(event) {
if (settings.allowSubmit) {
var type = $(this).attr("type");
if (type == "submit") {
return true;
}
}
if (event.keyCode == 13 ) {
var inputs = $(this).parents("form").eq(0).find(":input:visible:not(disabled):not([readonly])");
var idx = inputs.index(this);
if (idx == inputs.length - 1) {
idx = -1;
} else {
inputs[idx + 1].focus(); // handles submit buttons
}
try {
inputs[idx + 1].select();
}
catch(err) {
// handle objects not offering select
}
return false;
}
});
return this;
};
})( jQuery );
以下是我一直在使用的内容:
$("[tabindex]").addClass("TabOnEnter");
$(document).on("keypress", ".TabOnEnter", function (e) {
//Only do something when the user presses enter
if (e.keyCode == 13) {
var nextElement = $('[tabindex="' + (this.tabIndex + 1) + '"]');
console.log(this, nextElement);
if (nextElement.length)
nextElement.focus()
else
$('[tabindex="1"]').focus();
}
});
注意,live
已被jQuery弃用,现在应该使用on
。要注意tabindex,并且不仅仅是针对表单,而是整个页面。
我将接受答案的代码编写为jQuery插件,我发现这更加有用。(而且,它现在会忽略隐藏、禁用和只读表单元素)。
$.fn.enterAsTab = function () {
$(this).find('input').live("keypress", function(e) {
/* ENTER PRESSED*/
if (e.keyCode == 13) {
/* FOCUS ELEMENT */
var inputs = $(this).parents("form").eq(0).find(":input:visible:not(disabled):not([readonly])"),
idx = inputs.index(this);
if (idx == inputs.length - 1) {
inputs[0].select()
} else {
inputs[idx + 1].focus(); // handles submit buttons
inputs[idx + 1].select();
}
return false;
}
});
return this;
};
这是最终对我完美工作的解决方案。我正在使用jqeasyui,它运行良好。
$(document).on('keyup', 'input', function(e) {
if(e.keyCode == 13 && e.target.type !== 'submit') {
var inputs = $(e.target).parents("form").eq(0).find(":input:visible"),
idx = inputs.index(e.target);
if (idx == inputs.length - 1) {
inputs[0].select()
} else {
inputs[idx + 1].focus();
inputs[idx + 1].select();
}
}
});
包括所有类型的输入
$(':input').keydown(function (e) {
var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
if (key == 13) {
e.preventDefault();
var inputs = $(this).closest('form').find(':input:visible:enabled');
if ((inputs.length-1) == inputs.index(this))
$(':input:enabled:visible:first').focus();
else
inputs.eq(inputs.index(this) + 1).focus();
}
});
enabled="false"
,设置了tabindex顺序,但是当光标在文本框中时按下回车键仍会触发默认操作(提交第一个按钮)。是否有任何更改使得这对我需要有所不同?我对Jquery一无所知,只熟悉asp.NET和VB.NET。 - pixelmeow- pmereles$(this).closest('form')。长度
.find(':input:visible:enabled[tabindex!="-1"]').not(':input[readonly]');
- 跳过只读和tabindex=-1的字段...2)if (key == 13 && $(this).attr('type') != 'submit')
排除提交按钮。 - Rustam Guliev$('input').keydown( function (event) { //event==Keyevent
if(event.which == 13) {
var inputs = $(this).closest('form').find(':input:visible');
inputs.eq( inputs.index(this)+ 1 ).focus();
event.preventDefault(); //Disable standard Enterkey action
}
// event.preventDefault(); <- Disable all keys action
});