Ну, это мой код, я пытаюсь добавить к кнопке ввода поведение вкладки (когда я нажимаю кнопку ввода, следующий ввод будет фокусироваться).

Когда я нажимаю клавишу ввода, появляется Uncaught RangeError. Все перепробовала, но ничего не изменилось.

Окружающая среда: JavaEE (начальные символы). jquery.

function ifNotTextPass(selector) {
    if (selector.next().is('input[type="text"]')) {
        alert('yes');
        selector.next().focus();
    } else {
        if (selector.next() !== null) {
            ifNotTextPass(selector.next());
        }
    }
}

$(document).ready(function () {
    $('input[type="text"]').keypress(function (e) {
        if (e.keyCode === 13) {
            ifNotTextPass($(this));
        }
    });
});
0
a bouchenafa 19 Мар 2014 в 16:57

2 ответа

Лучший ответ

Проблема в том, что бесконечный вызов функции, как и бесконечный цикл.

Я изменил всю структуру кода. И я пришел к решению без каких-либо ошибок.

Этот код придаст кнопке ввода то же поведение, что и кнопка вкладки. плюс он будет сосредоточен только на тексте и текстовых областях.

$(document).on('keydown', 'input[type="text"],textarea', function(e) {
            var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;

           if(key === 13) {
               e.preventDefault();
               $(this).focus();
               var inputs = $(this).parents('body').find(':input[type="text"]:enabled:visible:not("disabled"),textarea');

                inputs.eq( inputs.index(this)+ 1 ).focus();
                inputs.eq( inputs.index(this)+ 1 ).click();  

                e.preventDefault();
                e.stopPropagation();
            }   
}              
0
a bouchenafa 23 Мар 2014 в 10:01

Селектор jQuery никогда не вернет null, поэтому у вас есть рекурсия до тех пор, пока стек не переполнится. Попробуйте вместо этого:

if (selector.next().length) {
0
Jason P 19 Мар 2014 в 13:02