2011-12-20 8 views
0

Clickイベント内で何かを行う関数がある場合、その関数のバインドを解除してから再バインドするのは正しいですか?クリック内の関数をアンバインドして再バインドするのは正しいですか?

現在、ボタンをクリックするとポップアップする機能があります。それはサイズ変更され、すべてのものになりますが、機能内でうまく動作します。今の私の問題は、このポップアップを隠すと(ブラウザのサイズ変更でこのポップアップを割り当てなかった)ブラウザのサイズを変更しようとすると、この機能はまだ有効です。今私はそれをクリックすると、この関数のバインドを解除するはずですか?

おかげ

マイコード

function popup() { 

$(window).resize(function() { 
var maskHeight = $(window).height(); 
var maskWidth = $(window).width(); 
var dialogTop = (maskHeight - $('#dialog-box').height())/3; 
var dialogLeft = (maskWidth - $('#dialog-box').width())/2; 
$('#dialog-overlay').css({ height:$(document).height(), width:$(document).width() }).show(); 
$('#dialog-box').css({ top: dialogTop, left: dialogLeft, position:"fixed"}).show(); 
}).resize(); 

$('#dialog-message').html(message); 

}; 

$('#register').click(function(){ 
popup(); 
$('html').unbind(popup);  
return false; 
}); 

これはそれをアンバインドするために右である場合にもわかりません。しかし、私はそれを試したときに動作していないようです。

+0

あなたは、いくつかのコードを表示することができますか? –

+0

@MichaelMiorコードを追加しました – hellomello

答えて

0

イベントハンドラが不要になったらバインドを解除することをお勧めします。負の効果がない場合、アンバインドしないことを選択できます。しかし、スクリプトの速度を落としていると感じたら、それらをアンバインドすることは、もはや必要ではないので、パフォーマンスを向上させるための本当の良いアイデアです。

また、バインドを解除する代わりに、コードを実行する前にイベントハンドラのフラグをチェックすることもできます。

0

はい、いいえ。 $.bindを使用している場合は、必要に応じてイベントをバインドおよびアンバインドするのはかなり簡単です。

イベント委任の形式を使用している場合は、状態を含むオブジェクトを維持する方が簡単でしょう。

state = { 
    my_event: false 
} 

、その後、クリックイベント内:

if (!state.my_event) 
{ 
    do_something(); 
} 
関連する問題