昨天修改alert彈出的警告太難看了,改用dialog對話框,而後就報了一個錯:javascript
jquery-2.0.2.min.js:5 Uncaught RangeError: Maximum call stack size exceeded.
反覆測試,在bootstrap
的modal
模態框上彈出了jQuery UI
的dialog
,才報這個錯的。css
堆棧溢出!!!
感受這個問題挺嚴重的,怎麼調試都找不到報錯的緣由,上網搜了一下,資料以下:
瀏覽器JS報錯Uncaught RangeError: Maximum call stack size exceeded
JS 異常: Uncaught RangeError: Maximum call stack size exceededhtml
歸根結底,緣由是遞歸調用了,可是,如同第二個連接裏所說的:java
表面上看,是由於遞歸次數太多致使內存被耗費太多,可是個人程序中,並無一處使用遞歸算法啊
個人js中一樣是沒有使用遞歸調用的狀況啊,差點要放棄了。
問題的根源在於網頁中引用了兩個不一樣的JavaScript庫,而這兩個庫都對JavaScript原始對象的某些方法作了修改,從而致使出現了循環引用
仔細研究了下jQuery UI 實例 - 對話框(Dialog),恍然大悟,dialog
本質上也是modal
。
咱們這裏形成報錯的緣由 是 咱們使用的bootstrap
的modal
模態框和jQuery UI dialog
的肯定按鈕的click
事件衝突了,也就是說,問題的根源是引用了兩個不一樣的JavaScript庫,他們都對彈出的modal作出了修改,我兩個同時嵌套使用的時候,就形成了遞歸調用。jquery
最終,解決辦法是將dialog的modal設置爲false:算法
$(function() { $( "#dialog-modal" ).dialog({ height: 140, modal: false }); });
jQuery UI 實例 - 對話框(Dialog)中也說了:bootstrap
模態確認
確認一個動做多是破壞性的也多是有意義的。設置 modal 選項爲 true,並經過 buttons 選項來指定主要的和次要的用戶動做。
哎。。。總之,問題解決了。瀏覽器