iT邦幫忙

0

離開頁面提醒問題,即使是指定的按鈕觸及,仍然會提示確定離開頁面?

// var isChange = false;
// $(function () {
//
//   $("input,textarea,select").change(function () {
//       isChange = true;
//       $(this).addClass("editing");
//   });
//
//   $(window).bind('beforeunload', function (e) {
//       if (isChange || $(".editing").get().length > 0) {
//           return '★資料尚未存檔,確定是否要離開?★';
//       }
//   });
//
// });
//
// $("button").click(function (e) {
//     $("input,textarea,select").removeClass('editing');
// });

我這是網路找到的
我的按鈕是
每次按下去後他還是會提示:確定離開?
是哪裡順序錯誤?

froce iT邦大師 1 級 ‧ 2018-08-14 10:43:29 檢舉
把你的code簡化丟出來。
都老資格了,該學學怎麼問問題比較聰明。
只給你提示一個。
注意一下你的 isChange 值。
你有移除class的動作。但無isChange 為false的動作。
所以只要有動作的情況下,全都是試為true。自動就會跑訊息了。
watercool iT邦新手 5 級 ‧ 2018-08-14 13:18:59 檢舉
code看起來沒問題,我直接複製貼上是可以使用的耶,你要不要試看看用chrome F12看一下那個判斷式的地方是哪個一直都是true呢?

1 個回答

0
最佳解答

這樣吧…

$(function () {
       var isChange = false;
       var editObj = $("input,textarea,select");
        editObj.change(function () {
            isChange = true;
            $(this).addClass("editing");
       });

       $(window).bind('beforeunload', function (e) {
           if (isChange || editObj.hasClass('editing')) {
               return '★資料尚未存檔,確定是否要離開?★';
           }
       });

       $("button").click(function (e) {
            editObj.removeClass('editing');
       });
 }); 
看更多先前的回應...收起先前的回應...
松松 iT邦研究生 2 級 ‧ 2018-08-14 12:47:45 檢舉

這原理是什麼?看來網路上的還是要檢查一下才能用

原理就是$(".editing").get().length 在bind beforeunload事件的時候還沒有,所以拿來判斷會有問題,改成$('body').find('.editing').length 應該也可以,總之要在beforeunload執行時重新取一次editing

松松 iT邦研究生 2 級 ‧ 2018-08-15 15:04:47 檢舉

真的是弔詭了,該不會又是編輯器的關係?怎麼按下button還是會出現視窗

不要亂用套件,是不是套件的關係,換回沒套件的方式做一遍不就知道了

我要發表回答

立即登入回答