在window.onbeforeunload中按钮点击完成之前光标没有停止?

时间:2012-09-05 15:05:44

标签: javascript jquery asp.net

我在window.onbeforeunload下面有javascript代码。按下浏览器后退按钮时,我在按钮单击方法后面调用代码。

现在问题是在$("#buttonclientid").click()完成之前光标没有停止。只需调用方法并转到下一个语句。如何保持或停止光标直到$("#buttonclientid").click()完成,然后转到下一步?

var form_has_been_modified = 0;
  $(function () {

      $("input").keyup(function () {
          form_has_been_modified = 1;
      })
      window.onbeforeunload = function (e) {
          if (!form_has_been_modified) {
                  return;
          }
                doYouWantTo();
      }

   });

   function doYouWantTo(){
        doIt=confirm('Do you want to save the data before leave the page?');
        if (doIt) {
             var returnbutton;
             //cursor should stop here until click function completes.
             returnbutton = $("#buttonclientid").click();
        }
        else{

            }
        }

2 个答案:

答案 0 :(得分:1)

我相信你的问题在于你的doYouWantTo函数没有返回值传递回onbeforeunload,所以它在离开页面的同时还运行函数,而不是等到它完成了。

你最好的行动就是:

return doYouWantTo()
....
if(doIt) {
    $('#buttonclientid').click(function() { // unsure if you can attach callback to click but idea is same
        return true;
    });
} else {
    return true;
}

答案 1 :(得分:0)

将事件处理程序绑定到onbeforeunload事件时,它应返回以下两种情况之一:

  • 如果要显示确认,则处理程序应返回字符串
  • 如果您不想要显示确认(跳过处理程序),请返回undefined(或根本不返回,同样的效果)

话虽如此,您的代码看起来应该是这样的:

var form_has_been_modified = false;
$("input").keyup(function () {
    form_has_been_modified = true; // use a boolean :P
});

window.onbeforeunload = function (e) {
    if (form_has_been_modified) {
        return 'Do you want to save the data before leave the page?';
    } else {
        return undefined; // this can be omitted if you prefer
    }
};

告诉用户点击系统对话框的唯一方法是使用setTimeout。有关该主题的详细信息,请参阅this question