2011-07-13 5 views
1

私のonbeforeunloadイベントハンドラ内のビジネスロジックを、指定された要素がクリックされたときにのみ発生させたいと思います。私は、次のコード(簡体字)持ってonbeforeunloadの前にjQuery入力のクリックイベント?

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後に処理されます。 2回目にクリックすると、あらかじめ処理されています(これはFF4.0です)。

この作業を行う上での助けがあれば、大歓迎です。

編集:修正されました。 :)

基本的に2回のクリックイベントがありました。

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

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

どのイベントが最初に開始されたかは、常にコンテストでした。私は2つをマージし、正しく動作しているように見えます。 ...それはフォームの送信を無視これは役立つはず

+1

返品を偽にしましたか? $( "#myButton")。(function(){ myButtonClicked = true; falseを返す; }); 私はそれがポストバックしていると思います。 – ysrb

+0

@ysrb - 私はそれを提出し、ポストバックをしたい(それはonbeforeunloadメソッドを呼び出す - ビットを明確にするためにコードを更新した) – Russell

+0

なぜonbeforeunloadを使うの?なぜあなたはちょうどクリックハンドラー? – gilly3

答えて

1

あなたの助けのysrb :)のため

おかげ

$(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; 
     } 
    } 
}); 

});

関連する問題