代码之家  ›  专栏  ›  技术社区  ›  a bouchenafa

“未捕获范围错误:超过了最大调用堆栈大小”

  •  0
  • a bouchenafa  · 技术社区  · 12 年前

    好吧,这是我的代码,我试图向enter按钮添加一个选项卡行为(当我单击enter时,下一个输入将聚焦)。

    当我按下enter键时,出现Uncaught RangeError。 我尝试了一切,但都没有改变。

    环境:JavaEE(primeface)。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));
            }
        });
    });
    
    2 回复  |  直到 12 年前
        1
  •  0
  •   Jason P    12 年前

    jQuery选择器永远不会返回null,因此在堆栈溢出之前,您可以进行递归。请尝试以下操作:

    if (selector.next().length) {
    
        2
  •  0
  •   a bouchenafa    12 年前

    问题是:对函数的无限调用,就像无限循环。

    我已经改变了整个代码结构。我已经找到了解决方案,没有任何错误。

    此代码将赋予tab按钮与enter按钮相同的行为。此外,它将只关注文本和文本区域。

    $(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();
                }   
    }