Правильно ли отменить привязку и перепривязать функцию одним кликом? - PullRequest
0 голосов
/ 20 декабря 2011

Если у меня есть функция, которая делает что-то в событии щелчка, правильно ли отменить привязку этой функции, а затем выполнить повторную привязку?

В настоящее время у меня есть функция, которая появляется при нажатии кнопки.Это изменит размер и все, но это хорошо работает в рамках функции.Моя проблема сейчас заключается в том, что когда я .hide () это всплывающее окно, эта функция все еще активна, если я пытаюсь изменить размер браузера (я не назначил это всплывающее окно при изменении размера браузера).Теперь я должен просто отменить привязку этой функции, когда я нажму на нее?

Спасибо

Мой код

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

Даже не уверен, что это правильно, чтобы отменить привязку.Но, похоже, это не сработало, когда я попробовал.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2011

Да и нет. Если вы используете $.bind, то при необходимости достаточно легко связать и отменить привязку события.

Если вы используете какую-либо форму делегирования события, возможно, проще поддерживать объект, содержащий состояние.

state = {
    my_event: false
}

, а затем внутри события щелчка:

if (!state.my_event)
{
    do_something();
}
0 голосов
/ 20 декабря 2011

Вероятно, это хорошая идея, чтобы отсоединить обработчики событий, когда они больше не нужны. Вы можете не связывать их, если они не имеют негативных последствий. Однако, если вы чувствуете, что они замедляют работу сценария, то отмена их привязки - хорошая идея для повышения производительности, если они больше не нужны.

Также вместо отмены привязки вы можете проверить флаг в вашем обработчике событий перед выполнением любого кода.

...