2011-07-13 83 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; 
     } 
    } 
}); 

});