2013-06-04 3 views
3

У меня есть список элементов в списке. Нажатие на один li отправляет запрос JSON и открывает страницу описания.Предотвращение других событий нажатия в списке (один раз постучал)

С момента открытия страницы описания требуется 1 или 2 секунды, есть время щелкнуть по другому элементу в списке, который затем вызывает больше событий, чего я не хочу. Это в конечном итоге делает прокрутку (с iscrollview) беспорядочной, при этом нижняя панель поднимается и опускается при возвращении к списку.

Как я могу прекратить слушать больше кранов в списке во время обработки открытия страницы описания?

+0

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

ответ

1

Не смотря на это, нам очень сложно помочь.

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

Вы бы установить глобальную переменную (т.е. в корневом уровне вашего файла JavaScript), а ложное:

tapProcessing = false; 

Затем, когда вы начнете обработку вас, проверить против этого флага и, если нет - true, то процесс.

Вот элементарный пример, чтобы показать вам, что я имею в виду:

$('.selector').click(function(e){ 
    if(!tapProcessing){ 
     //the function is not processing, therefore set the flag to true: 
     tapProcessing = true; 

     //do your load/etc, and reset the flag to false in the callback (when finished): 
     $.get("test.php", function(data) { 
      // process your data here 
      // set your flag back to false: 
      tapProcessing = false; 
     }); 
    }else{ 
     //the function is already being processed from a previous click 
    } 
    e.preventDefault(); //assuming it's a link 
}); 
+0

Отлично работает! Спасибо вам за это. –

-1

Вот фрагменты кода, которые я добавил:

эль мой список, событие является целевой страницей установки tapProcessing лжи следует делать только после того, как «после того, как запрос changePage() завершил загрузку страницы в DOM, и все анимации перехода по страницам завершились» (JQM doc: http://jquerymobile.com/demos/1.2.0/docs/api/events.html)

$('#el').click(function(e){ 
    if(tapProcessing) { 
     alert('prevent'); 
     e.preventDefault(); //assuming it's a link 
    } else { 
     alert('oktap'); 
     tapProcessing = true; 
    } 
}); 

$(document).bind("pagechange", function(event, options) { 
if(options['toPage']['selector'] == '#event') { 
     tapProcessing = false; 
    } 
}); 

Я также установил tapProcessing на false, если получаю событие отключения или таймаут.