2012-02-16 3 views
0

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

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

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

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

Thanks

ответ

0

использовать флаг!

лучше использовать некоторую логическую переменную и проверить, разрешено ли вам действие, а не вызов 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» для привязки данных к элементам. если вы можете сделать это с помощью расширительных реквизитов, вместо этого используйте переменные.

+0

Спасибо! что очищает мое сомнение. :) – Sushil

Смежные вопросы