2015-10-06 3 views
0

У меня есть список почтовых индексов, в каждом из которых есть флажок рядом с ними. Когда пользователь проверяет или отменяет печать ZIP, я перерисовываю карту, на которой нарисованы полигоны ZIP. Вместо того, чтобы сообщать карте перерисовывать каждый раз, когда нажимается класс «polyZIP», я хотел бы сделать задержку, когда карта будет нарисована через 1 секунду после клика ... но есть та часть, которую я не уверен в , Если пользователь идет вниз по списку и быстро проверяет/отменяет почтовые индексы, я бы хотел, чтобы каждый щелчок перезапускал таймер 1 секунды, чтобы карта была перерисована только после того, как щелчок остановился хотя бы на секунду.Можно ли перезагрузить клик на новый клик

Я создал (очень уродливый) тест на http://jsfiddle.net/a2f1ydyh/. Вы можете увидеть на скрипке, что если вы быстро нажмете кнопку «Пуск», в конечном итоге область результатов будет подсчитывать каждый клик. Мне бы хотелось, чтобы в любом случае любой щелчок перезапустил счетчик.

Вот уродливый код:

<script> 
    var counter = 0; 
    var timeout = ""; 
    $(function() { 
     $("#go").click(function() { 
      timeout = setTimeout(function() { actionFunction(); }, 3000); 
     }); 
    }); 

    function actionFunction() 
    { 
     counter++; 
     var results = $("#results").html() + "<br />" + counter; 
     $("#results").html(results); 
     clearTimeout(timeout); 
    } 
</script> 

<input id="go" type="button" value="CLICK ME" /><br /><br /> 

<div id="results"></div> 
+0

Похоже, вы просто должны переместить 'clearTimeout (тайм-аут)' для начала самой функции мыши. – Shikkediel

+0

Я попытался переместить его после таймаута = setTimeout ... line, но потом он вообще не работал ... я переместил его после «actionFunction()»; и он работал так же, как и в функции actionFunction. – Brds

+1

Вы пробовали его как первую строку кода внутри обработчика кликов? Тайм-аут сам по себе должен быть написан немного короче: 'timeout = setTimeout (actionFunction, 3000);'. – Shikkediel

ответ

0

Очистить таймаут, прежде чем установить новый в вашей click функции.

var counter = 0; 
 
var timeout = ""; 
 
$(function() { 
 
    $("#go").click(function() { 
 
    clearTimeout(timeout); 
 
    timeout = setTimeout(function() { 
 
     actionFunction(); 
 
    }, 3000); 
 
    }); 
 
}); 
 

 
function actionFunction() { 
 
    counter++; 
 
    var results = $("#results").html() + "<br />" + counter; 
 
    $("#results").html(results); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="go" type="button" value="CLICK ME" /> 
 
<br /> 
 
<br /> 
 

 
<div id="results"></div>

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