Вам нужно использовать таймер, но не один для каждого изменения, только 1 глобальный таймер. Каждый раз, когда флажок установлен, ползунок перемещен и т. Д., Установите время ожидания, скажем, 500 мс для отправки вашего запроса ajax. Но каждый раз, когда вносятся изменения, также очищайте существующий таймер и устанавливайте новый.
Таким образом, отправка происходит только после 500 мс бездействия. Если пользователь щелкает счастливым, таймер очищается каждый раз, и только после того, как он перестает щелкать, ajax отправляется.
myForm.find( 'input, textarea, select' ).bind( 'change', function( )
{
var self = $(this);
self.attr( 'changed', 'changed' ); // -- mark as modified
clearTimeout( $(document).data( 'ajaxTimer' )); // -- prevent previous changes from being submitted
$(document).data( 'ajaxTimer', setTimeout( submitData, 500 )); // -- start new timer for submission
} );
function submitData( )
{
var allInputs = myForm.find( 'input, textarea, select' );
var changedInputs.filter( '[changed]' );
allInputs.removeAttr( 'changed' ); // -- mark all as submitted
changedInputs.each( function( )
{
// gather values here
} );
// build your AJAX request here
}