6

如果用户试图离开包含未保存设置的页面,我希望显示警告,但如果他们试图保存这些设置,显然不会。

我想我的理解是错误的,因为我认为以下内容应该有效,但事实并非如此。有人可以告诉我我做错了什么吗?谢谢。

$('input[name="Submit"]').off('onbeforeunload');

window.onbeforeunload = function closeEditorWarning(){

    /** Check to see if the settings warning is displayed */
    if($('#unsaved-settings').css('display') !== 'none'){
        bol_option_changed = true;
    }

    /** Display a warning if the user is trying to leave the page with unsaved settings */
    if(bol_option_changed === true){
        return '';
    }


};
4

4 回答 4

15

您可以使用 jquery .on() 设置 onbeforeunload ,然后在表单提交中使用 .off()

// Warning
$(window).on('beforeunload', function(){
    return "Any changes will be lost";
});

// Form Submit
$(document).on("submit", "form", function(event){
    // disable unload warning
    $(window).off('beforeunload');
});
于 2014-08-26T16:59:45.440 回答
5

你可以试试这个:点击提交按钮时设置一个标志,并使用这个标志来检查用户是否点击了提交或中途离开页面

伪代码:

var submit_clicked = false;

$('input[type="submit"]').click(function(){
    submit_clicked = true;
});


window.onbeforeunload = function closeEditorWarning () {

  /** Check to see if the settings warning is displayed */
  if(($('#unsaved-settings').css('display') !== 'none') && 
      submit_clicked === false) {
    bol_option_changed = true;
  }

  /** Display a warning if the user is trying to leave the page with unsaved settings */
  if(bol_option_changed === true){
    return '';
  }


};
于 2013-01-15T15:59:41.167 回答
0

我遇到了这个问题,所以我想分享我的解决方案。

Brent White的解决方案对我不起作用,因为我使用 jQuery-validation 插件。这意味着如果用户提供了无效的输入,即使他们点击了提交按钮,他们仍然会停留在页面上。此时,如果他们离开或刷新页面,则不会显示警报消息。

$(window).bind('beforeunload', function(evt) {
  var isSubmitButton = (evt.srcElement.activeElement.type === "submit");
  var isModified = ($form.data("isModified") === true); 
  if ( !isSubmitButton && isModified) {
    return "You need to save your changes before you leave the page";
  } 
});  
于 2015-04-29T18:49:36.050 回答
0

这是您问题的完美答案。

document.querySelector('.send').addEventListener("click", function(){ // put a class="send" in submit button
    window.btn_clicked = true; // if it is click onbeforeunload will not add dialog anymore
});
window.onbeforeunload = function(){

      if(!window.btn_clicked){
          var lot = $('#lot_no').val(); //getting values from form
      if(!lot == ''){  //checking if it is not empty
        return 'Changes you made not be saved!';
      }

      }


};
于 2018-07-24T10:15:59.107 回答