Повторная привязка отмены привязки события нажатия на элемент - PullRequest
0 голосов
/ 16 февраля 2012

Я в некотором замешательстве, я хочу знать, что связывание и открепление события для одного и того же элемента лучше, или я должен использовать флаг (что-то вроде 'inProgress').

У меня есть сценарий, в котором ядолжен предотвратить операцию или событие, если одна операция уже выполняется, например.

У меня есть тег привязки, и я связал событие с этим тегом привязки, и это событие обрабатывает некоторые функциональные возможности ajax, такие какПри извлечении данных и обновлении определенной части страницы я хочу, чтобы повторный щелчок по тегу привязки не происходил так, чтобы после первого щелчка по тегу привязки ожидался ответ от сервера и части страницы.обновляется, моя путаница заключается в том, должен ли я отсоединять событие, когда происходит щелчок, и снова связывать тот же обработчик после обработки ответа, или я должен установить флаг, чтобы проверить, выполняется ли какой-либо обработчик, и установить флаг false, как только ответобрабатываются?какой способ был бы эффективен с точки зрения производительности?

Любая помощь / предложение очень ценится!

Спасибо

1 Ответ

0 голосов
/ 16 февраля 2012

используйте флаг!

лучше использовать некоторую логическую переменную и проверить, разрешено ли вам это действие, а не вызывать bind и unbind (что является дополнительными издержками).

если вы используете jQuery, вы можете использовать data () для хранения данных на этой привязке.

как:

$('.testLink').on('click',function(){

    //reference link
    var link = $(this);

    //check data
    data = link.data('amIallowed');

    //if no data existed yet
    if(!data){

        //set data and make it false to prevent further requests
        link.data('amIallowed',{
            allowRequest : false
        });

        //lets do ajax
        doAjax();    
    }
    else{ //if there was data

        //and we were allowed
        if(data.allowRequest){
            doAjax(link);    
        }   
    }
});

//do ajax stuff here
function doAjax(link){
    $.post('url',{param:val},function(){

        //revert to true after request
        link.data('amIallowed',{
            allowRequest : true
        });

    });
}

если вы не используете jQuery, вы все равно можете сделать то же умение, используя простой JS. jQuery использует « expando-properties » для привязки данных к элементам. если вы можете делать с расширениями, используйте вместо них переменные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...