2013-03-01 3 views
0

Есть ли способ узнать, не нажата ли кнопка определенное время? У меня есть две кнопки увеличения и уменьшения (плюс и минус) для управления температурой с помощью запроса Ajax. Значение увеличивается один к одному со следующей функцией:Есть ли способ узнать, не нажата ли кнопка определенное время?

Plugin_increment.prototype.startPluginTempe = function (selector, dataAux, dataAux2, varAux, varAux2) { 
    var valueElement = $(selector); 
    function incrementValue(e){ 
     if((valueElement.text() < 40) && (valueElement.text() > 10)){ //max and min 
      valueElement.text(Math.max(parseInt(valueElement.text()) + e.data.increment)); 
     } 

     if(valueElement.text() == 40){//max 
      if(e.data.increment == -1){ 
       valueElement.text(Math.max(parseInt(valueElement.text()) + e.data.increment)); 
      } 
     } 
     if(valueElement.text() == 10){//min 
      if(e.data.increment == 1){ 
        valueElement.text(Math.max(parseInt(valueElement.text()) + e.data.increment));     
       } 
     } 
     //Ajax request?????? 
     return false; 
    } 
    $(varAux).button({ 
       icons: { 
       primary: "ui-icon-plusthick" 
       }, 
       text: false 
     }).bind('click', {increment: 1}, incrementValue);  
    $(varAux2).button({ 
       icons: { 
       primary: "ui-icon-minusthick" 
       }, 
       text: false 
     }).bind('click', {increment: -1}, incrementValue); 

}; 

«селектор» является селектор пролета, чтобы показать значение. «varAux» и «varAux2» являются селекторами кнопок «плюс» и «минус».

Если я отправляю запрос Ajax для каждого приращения, клиент перегружается. Я думаю, что вариант может состоять в том, чтобы узнать, не нажата ли кнопка на определенное время. Другой путь?

Я использую jquery-ui для кнопок плюс и минус.

+1

Почему бы вам не отключить кнопки до тех пор, пока не будет завершен запрос ajax? –

+0

Потому что приращение делается один к одному, если я хочу увеличить значение на пяти единицах. Будет пять запросов Ajax. Запросов было бы необязательно – vicenrele

ответ

1

Вы можете установить минимальный интервал между запросами AJAX. Если в течение этого интервала дважды нажать кнопку, будет выполнен только один запрос:

function incrementValue(e) { 
    //your existing code here 
    scheduleAjaxRequest(); 
} 

var minimumTimeBetweenAjaxRequests = 500; // in milliseconds 
var ajaxRequestIsScheduled; 

function scheduleAjaxRequest() { 
    if (ajaxRequestIsScheduled) { 
     // two or more clicks within specified interval, 
     // the data will be sent in request that's already sceheduled 
     return; 
    } 
    ajaxRequestIsScheduled = setTimeout(doAjaxRequest, minimumTimeBetweenAjaxRequests); 
} 

function doAjaxRequest() { 
    //Ajax request 
    ajaxRequestIsScheduled = null; // clear timeout ID to allow next request to be scheduled 
} 
+2

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

+0

Отличная идея, но я бы предпочел реализовать только один запрос, когда останавливается несколько кликов. Конечная цель - сократить запросы Ajax, а не задерживать их. Будут ненужные запросы – vicenrele

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