Javascript 在asp.net中按Enter键时如何转到下一个tabindex?

Javascript 在asp.net中按Enter键时如何转到下一个tabindex?,javascript,jquery,asp.net,Javascript,Jquery,Asp.net,我有一些表单,其中包括一些文本框,它们的tabindex不是默认值。我想当用户按下enter键时,他们可以选择下一个tabindex,但我发现的任何解决方案似乎只适用于默认的tabindex而不是custom 这是我的页面: $(文档).ready(函数(){ $(“输入”)。非($(“:按钮”)。按键(功能(evt){ 如果(evt.keyCode==13){ iname=$(this.val(); 如果(iname!==“提交”){ var fields=$(this).parents('

我有一些表单,其中包括一些文本框,它们的tabindex不是默认值。我想当用户按下enter键时,他们可以选择下一个tabindex,但我发现的任何解决方案似乎只适用于默认的tabindex而不是custom

这是我的页面:

$(文档).ready(函数(){
$(“输入”)。非($(“:按钮”)。按键(功能(evt){
如果(evt.keyCode==13){
iname=$(this.val();
如果(iname!==“提交”){
var fields=$(this).parents('form:eq(0),body').find('button,input,textarea,select');
var index=fields.index(本);
如果(索引>-1&&(索引+1)








.index按顺序获取元素的索引,而不是tabIndex属性。试试这个:

$(文档).ready(函数(){
$(“输入”)。不($(“:提交,:按钮”)。按键(功能(evt){
evt.preventDefault();
如果(evt.keyCode==13){
var next=$('[tabindex=“”+(this.tabindex+1)+'“]');
if(next.length)
next.focus()
其他的
$('[tabindex=“1”]')。焦点();
}
});
});








多亏@Marcos提供了主要的javascript代码,我添加了一些代码,现在它就像一个符咒一样工作,enter将把焦点切换到下一个,直到它进入一个按钮,当你按下按钮时,它将触发后面的按钮代码(而不是下一个焦点)

功能停止键(evt){
var evt=(evt)?evt:((事件)?事件:空);
var节点=(evt.target)?evt.target:((evt.srcement)?evt.srcement:null);
if((evt.keyCode==13)&&(node.type==“text”){return false;}else{fuNextFocus()}
}
document.onkeypress=stopRKey;
函数fuNextFocus()
{
$(文档).ready(函数(){
$(“输入”)。非($(“:按钮”)。按键(功能(evt){
如果(evt.keyCode==13){
iname=$(this.val();
//提交
如果(在名称中!==“按钮”){
var-next=$('[tabindex=“”+(this.tabindex+1)+'“]');
如果(下一个长度)
next.focus()
其他的
$('[tabindex=“1”]')。焦点();
}
}
});
});
}








我一直在努力解决这个问题,因为tabIndex不是按1排序的。我有一个页面,它的增量是10和100,以便为将来的添加留出空间

函数findNextElement(senderElement){
var focussableements='a:not([disabled]),按钮:not([disabled]),输入[type=text]:not([disabled]),[tabindex]:not([disabled]):not([tabindex=“-1”]);
if(senderElement&&senderElement.form){
var focussable=Array.prototype.filter.call(senderElement.form.querySelectorAll(focussable元素),function(元素){
return element.offsetWidth>0 | | element.offsetHeight>0 | | element==senderElement
});
//复制
var inputs_original=Array.prototype.filter.call(senderElement.form.querySelectorAll(focussableElements),function(element){
return element.offsetWidth>0 | | element.offsetHeight>0 | | element==senderElement
});;
//按tabIndex排序
可聚焦.排序(函数(a,b){
if($(a)[0].tabIndex==$(b)[0].tabIndex){
//如果tabindex相等,则按DOM中的位置排序
if(输入原始索引(a)<输入原始索引(b)){
返回-1;
}否则{
返回1;
}
}else if($(a)[0].tabIndex<$(b)[0].tabIndex){
返回-1;
}否则{
返回1;
}
});
var指数=可聚焦的指数(senderElement);
返回可聚焦[索引+1];
}
返回null;

}
Thank you@Marcos,我检查过了,效果很好,但我必须为我的按钮设置UseSubmitBehavior=“false”,否则每次单击“输入我的提交”按钮时都会触发。似乎“if(iname!=='Submit'){”不起作用。Enter是表单提交的默认事件。您也可以使用以下命令“取消”此默认值:evt.preventDefault();我更新了示例,看一看。谢谢@Marcos您解决了我最大的问题,我使用了您的代码并添加了一些代码(从其他地方复制代码)现在它的工作就像一个符咒,再次感谢你,没有你的帮助我无法解决这个问题。
function stopRKey(evt) {
    var evt = (evt) ? evt : ((event) ? event : null);
    var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
    if ((evt.keyCode == 13) && (node.type == "text")) { return false; } else { fuNextFocus() }
}
document.onkeypress = stopRKey;

function fuNextFocus () {
        $(document).ready(function () {
            $("input").not($(":button")).keypress(function (evt) {
                if (evt.keyCode == 13) {
                    iname = $(this).val();
                    //Submit
                    if (iname !== 'Button') {
                        var next = $('[tabindex="' + (this.tabIndex + 1) + '"]');
                        if (next.length)
                            next.focus()
                        else
                            $('[tabindex="1"]').focus();
                    }

                }
            });
        });
}