如何确定javascript中window.onbeforeunload中的哪个控件导致了该事件

时间:2011-03-07 03:44:26

标签: javascript asp.net html

我已在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;
}

我正在尝试创建一个编辑屏幕,用户在导航之前会收到警告。它工作正常,除了我弹出正常的按钮点击后退。我希望避免这种情况,所以我想知道是否可以确定按下哪个按钮会起作用。

有人知道如何确定在windows.onbeforeunload中按下了哪个按钮吗?

或者,任何人都知道我想要实现的更好的方法吗?

2 个答案:

答案 0 :(得分:2)

通过将所有编辑项目TextBoxes等放入更新面板来解决此问题。

现在windows.onbeforeunload只会触发此外部的组件。

答案 1 :(得分:2)

另一种方法,如果你不能“控制”你控制的深度,那就是在某种程度上标记“好的控制”,那就是那些不应该触发离开导航逻辑的方法。 设置全局javascript变量(例如

)很容易实现
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;
}

并在要保持安全的事件上添加setGoodLink函数:

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