2011-03-04 4 views
8

양식의 모든 체크 박스 변경에 대해 jquery $. post 요청을 보냅니다. 내가 원하는 것은 사용자가 여러 개의 쓸모없는 요청을 피하기 위해 하나 이상의 확인란을 빠르게 검사하는 경우 $. post를 500ms 동안 지연시키는 것입니다.

여기

var delay = (function(){ 
    var timer = 0; 
    return function(callback, ms){ 
    clearTimeout (timer); 
    timer = setTimeout(callback, ms); 
    }; 
})(); 

$(document).ready(function() { 

    $('.checkbox').change(function() { 

     delay(function(){        
      $.post("/?page_id=4", $("#selectors").serialize(), function(data){ 
       $('#results').html(data); 
      }); 
     }); 

    }, 1000); 

}); 

이 작동하지 않는 이유 어떤 생각 ...이 $ .post 기능을 제외한 모든 작업을 보인다에서는 setTimeout 기능을 추가 한, 내 코드입니까?

+0

:'타이머를 = window.setTimeout (함수 , 1000); – ipalaus

+2

"}, 1000"이 잘못된 위치에 있지 않습니까? change() 함수 대신에 delay() 함수의 두 번째 인수가되어서는 안됩니까? –

+1

@ElianEbbing @Phil Elian이 말하는 것. 당신의 '1000'을'.change'로 보냅니다. 또한'timer'가'undefined'로 설정되어 있거나'setTimeout'을'id === 0'으로 죽일 수도 있습니다. – Raynos

답변

12

Live example

을이 :

$('.checkbox').change(function() { 

    delay(function(){        
     $.post("/?page_id=4", $("#selectors").serialize(), function(data){ 
      $('#results').html(data); 
     }); 
    }); 

}, 1000); 

는해야한다 : 나는 보통 그런에서는 setTimeout 사용

$('.checkbox').change(function() { 

     delay(function(){  
      alert('post');    
      $.post("/?page_id=4", $("#selectors").serialize(), function(data){ 
       $('#results').html(data); 
      }); 
     }, 1000); 

    }); 
+0

이것은 완벽하게 작동했습니다! 내가 그걸 놓쳤다는 것을 믿을 수 없어. 고마워. – Phil

+0

그래, 그런 일을 할 때 나는 싫지만 어느 시점에서는 우리 모두에게 일어난다 : P – subhaze

5

jQuery를 이미 지연 기능이 있습니다

$(window).delay(500).queue(function() { 
    $.post({}); 
}); 
+0

이것은 어떻게 든 오직 한 번만 실행됩니다 : http://jsfiddle.net/nGTN4/9/ – raveren

+0

업데이트 : $ .dequeue()를 추가했으며 간격을두고 체크 상자를 누르는만큼 여러 번 실행되므로 박자 수가 두드립니다. 목적. – raveren