2017-11-24 25 views
0

誰でも次のJSエラーの意味を教えていただけますか?JS jquery rangeError - 最大呼び出しスタックサイズを超えました

enter image description here すべてうまくいきます。

私はそれがこのために、おそらくだと思うが、コードスニペットJS:

   <!--move cursor to the end of input value--> 
       <script> 
        $(document).ready(function() { 
         jQuery.fn.putCursorAtEnd = function() { 
          return this.each(function() { 
           // Cache references 
           var $el = $(this), 
            el = this; 
           // Only focus if input isn't already 
           if (!$el.is(":focus")) { 
            $el.focus(); 
           } 
           // If this function exists... (IE 9+) 
           if (el.setSelectionRange) { 
            // Double the length because Opera is inconsistent about whether a carriage return is one character or two. 
            var len = $el.val().length * 2; 
            // Timeout seems to be required for Blink 
            setTimeout(function() { 
             el.setSelectionRange(len, len); 
            }, 1); 
           } else { 
            // As a fallback, replace the contents with itself 
            // Doesn't work in Chrome, but Chrome supports setSelectionRange 
            $el.val($el.val()); 
           } 
           // Scroll to the bottom, in case we're in a tall textarea 
           // (Necessary for Firefox and Chrome) 
           this.scrollTop = 999999; 
          }); 

         }; 

         (function() { 
          var searchInput = $(".js-typeahead"); 
          searchInput 
           .putCursorAtEnd() // should be chainable 
           .on("focus", function() { // could be on any event 
            searchInput.putCursorAtEnd() 
           }); 
         })(); 
        }); 
       </script> 
+0

でエラーは、無限ループを作成したことを意味します。私の推測はあなたが 'focus'で関数を実行しているからですが、関数自身が再び' focus'イベントをトリガします。あなたのコードに 'debugger'をセットし、それをステップ実行すれば、再帰呼び出しがどこから来ているのかを簡単に知ることができます。 –

答えて

0

これが最も可能性が高いですので、の

(function() { 
    var searchInput = $(".js-typeahead"); 
    searchInput.putCursorAtEnd().on("focus", function() { 
     searchInput.putCursorAtEnd() //you are invoking putCursorAtEnd here 
    }); 
})(); 

そしてputCursorAtEndに、あなたは再び

要素に focusを設定しています
if (!$el.is(":focus")) { 
     $el.focus(); 
} 

これは、フォーカスにフォーカスを当てようとしているため、再帰が終了しません。代わりに、バインドの

しようとしている何をやってから判断する

フォーカスのイベントが再び、click

(function() { 
    var searchInput = $(".js-typeahead"); 
    searchInput.putCursorAtEnd().on("click", function() { //focus is changed to click 
     searchInput.putCursorAtEnd(); 
    }); 
})(); 
+0

ああ、今私はそれを見る!魅力のように働きます。迅速な対応のための大きなTHX。 –

関連する問題