0

我有以下用于 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{

            }
        }
4

2 回答 2

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;
}
于 2012-09-05T15:13:14.587 回答
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. 有关该主题的详细信息,请参阅此问题

于 2012-09-05T15:15:30.730 回答