开发者

How to determine which control in window.onbeforeunload in javascript caused the event

I have set up in javascript:

var    onBeforeUnloadFired = false;

window.onbeforeunload = function (sender, args)

{
   if(window.event){
      if(!onBeforeUnloadFired) {
         onBeforeUnloadFired = true;
         window.event.returnValue = 'You will lose any unsaved changes!'; //IE
      }
   }
   else {
      return 'You will lose any unsaved changes!'; //FX
   }

   windows.setTimeout("ResetOnBeforeUnloadFired()", 1000);
}

function ResetOnBeforeUnloadFired() {
   //Need this variable to prevent IE firing twice.
   onBeforeUnloadFired = false;
}

I'm trying to achieve an edit screen where the user is warned before navigating away开发者_如何学C. It works fine except I get the pop up for normal post backs of button clicks. I'm hoping to avoid this so I'm figuring if I could determine which button was pressed it would work.

Does anybody know how to determine which button was pressed in the windows.onbeforeunload?

Alternatively anyone know a better approach to what I'm trying to achieve?


Solved this by putting into an update panel all edit items TextBoxes etc.

Now the windows.onbeforeunload only fires for components external to this.


Another method, if you can't "control" that deep you controls, is to mark somewhat the "good controls", that is the ones which should not trigger the away-navigation logic. That is easily achievable setting a global javascript variable such as

var isGoodLink=false;
window.onbeforeunload = function (e) {
  var message = "Whatever";
  e = e || window.event;
  if (!isGoodLink) {
  // For IE and Firefox
  if (e) {
    e.returnValue = message;
  }
  // For Safari
  return message;
  }
};
function setGoodLink() {
  isGoodLink=true;
}

And add the setGoodLink function on the events you want to keep safe:

<button type="button" onclick="javascript:setGoodLink() ">I am a good button!</button>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜