2011-07-13 39 views
1

我想在我的onbeforeunload事件处理程序中只有当指定的元素被点击时才有我的业务逻辑。jQuery输入点击事件之前onbeforeunload?

我有以下代码(简化):

var myButtonClicked = false; 

$(document).ready(function() { 
    window.onbeforeunload = myEventHandler; 
    $("#myButton").click(function() { 
    myButtonClicked = true; 

    $("#myform").submit(); 
    }); 
}); 

function myEventHandler(event) 
{ 
    if (myButtonClicked) 
    { 
    // Do checking. 
    // return "Dirty flag..blahblah"; 
    } 
} 

目前,这是生产相当怪异行为 - 第一次我的按钮被点击,点击事件是一个MyEventHandler后处理。第二次点击它,事先处理(这是在FF4.0)。

任何帮助获得这项工作将不胜感激。

编辑:修正。 :)

基本上我有两个点击事件;

myButton.click(function() { 
    ... 
    ignoreFlag = true; 
}); 

myButton.click(function() { 
    form.submit(); 
}); 

这总是一场关于哪一个事件首先被解雇的比赛。我合并了这两个,它似乎工作正常。

感谢您的帮助ysrb :)

+1

你有没有试过把返回false;? (“#myButton”)。click(function(){ myButtonClicked = true; return false; }); 我的猜测是回传。 – ysrb

+0

@ysrb - 我希望它提交并执行回发(这将调用onbeforeunload方法 - 我已更新代码来澄清一点。 – Russell

+0

为什么要使用onbeforeunload?为什么你不能只用你想要的点击处理程序? – gilly3

回答

1

这将有助于..它忽略表单提交

$(document).ready(function() { 
var warn_on_unload = ""; 
$('input:text,textarea').on('change', function() { 
    warn_on_unload = "Leaving this page will cause any unsaved data to be lost."; 
    $("form").submit(function() { 
     warn_on_unload = ""; 
    }); 
    window.onbeforeunload = function() { 
     if (warn_on_unload != '') { 
      return warn_on_unload; 
     } 
    } 
}); 

});