Uncaught RangeError: Maximum call stack size exceeded
控制臺報這個錯誤可能是由于多種原因,但大多是因為js編寫有錯誤。
這個錯誤的字面意思是:
代碼運行時發生了異常,但是沒有將其捕獲(Uncaught)
RangeError是一個特定的異常類,面向對象中都有捕獲異常的機制,當然也有一系列的類是異常類,用來定義各種異常
Maximum call stack size exceeded 是說,當前程序可能發生了比較頻繁的遞歸操作,而系統可供遞歸操作調用的內存空間是有限制的,當前操作超出了這個限制,因此發生了異常
當前的案例需求是這樣:
一個注冊表單,要實現:
當鼠標點擊文本框時,框內的文字上移,文本框獲取焦點,可供用戶輸入
當點擊文本框以外時,文字位置下移恢復,文本框失去焦點
HTML代碼是這樣:
<div class="form_group">
<input type="text" name="mobile" autocomplete="off" id="register_mobile" class="phone_input">
<div class="input_tip">手機號</div>
<div id="register-mobile-err" class="error_tip">手機號不能為空</div>
</div>
javascript代碼是這樣:(頁面提前導入了jquery-1.12.4.min.js)
$('.form_group').on('click focusin',function(){
$(this).children('.input_tip').animate({'top':-2, 'font-size':10}, 'fast').siblings('input').focus().parent().addClass('hotline');
});
這樣出來的效果是這樣:
這段js代碼的意思大體是這樣:
$('.form_group')獲取了class為form_group的div對象,然后編寫了它的點擊方法
$(this).children('.input_tip')獲取了class為input_tip的div對象
.animate({'top':-2, 'font-size':10}, 'fast')給input_tip添加了上移的動畫
.siblings意為兄弟姐妹,即為所有與input_tip平級的元素,其中包括input標簽,.siblings('input').focus,就是文本框獲取了焦點,光標在里面閃啊閃
最后.parent().addClass('hotline')是獲取了文本框的媽,也就是divform_group。然后給它添加了css屬性hotline,也就是文本框下面的那一道藍色的線
現在的效果不僅會報錯,而且是不符合預期的,鼠標點擊文本框外的位置,文字位置不會恢復
修改后的js是這樣:
$('.form_group').children('.input_tip').on('click focusin',function(){
$(this).animate({'top':-2, 'font-size':10}, 'fast').siblings('input').focus().parent().addClass('hotline');
});
出來的效果是這樣:
現在 Chrome 控制臺不報錯了
但是仔細測試發現,這樣還是有輕微的bug:
如果點擊字,則效果正常
如果點擊文本框中字以外的地方,則發現字不會上移,輸入內容后會與提示文字重合
當點擊一個文本框時,按tab鍵,焦點會到下一個文本框,但是文字不會上移
所以實質上是又發生了新的問題^_^。
總結
以上是生活随笔為你收集整理的Uncaught RangeError: Maximum call stack size exceeded的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: APP渗透测试之安卓APP抓包
- 下一篇: Java逐行写入字符串到文件