2014-10-30 8 views
0

제 문제는 제가 완료하는 데 ~ 600ms가 걸리는 것입니다. 사용자가 선택기를 스팸 클릭하면 여러 통화가 호출됩니다. 그러나 함수가 호출 될 때 클릭 이벤트 콜백을 비활성화하여 스팸 클릭을 중지하려고 시도했지만 작동하지 않습니다. 마우스 클릭을 멈추거나 대기중인 콜백을 제거 할 수있는 방법이 있습니까?Jquery Mouseclick Stack

$('.selector').click(function() { 
    $(this).off('click.disabled'); 
    //DO STUFF 
    $(this).on('click.disabled', false); 
}); 

감사!

var clicked = false; 
$('.selector').click(function() { 
    if (!clicked){ 
     clicked = true; 
     ... 
     clicked = false; 
    } 
}); 

또는 내가 지금 이것을 사용하는거야 번만

var myFunc = function(){ 
    ... 


    //on finish 
    $('.selector').one("click", myFunc); 
}; 

$('.selector').one("click", myFunc); 
+0

그리고이 함수는 어떻게 보이나요? 비동기입니까? – adeneo

+0

Javascript 비동기의 모든 항목이 하나의 스레드에서만 실행되는 것은 아닙니다. 죄송합니다. JS에 상당히 익숙하지 않으며 매우 지쳤습니다. ^.^ – Gouvi

+1

실행 중일 때 스피너 또는 무언가를 표시합니다. 아마 사용자가 스팸 클릭을 막을 수 있습니다. – Barmar

답변

0

상태를 얻기 위해 부울을 사용할 수 있습니다. 대개의 경우 이벤트 호출에 대해 더 많은 조사를해야 할 것이며 해킹 된 솔루션이 마음에 들지 않기 때문에 다른 방법으로이를 방지해야합니다.

의견에 관계없이 많은 의견을 부탁드립니다.

+0

나는 이것이 효과가 있다고 생각하지 않는다. 이벤트는 대기열에 들어 있으므로 이전 클릭 핸들러가 끝날 때까지 후속 클릭 핸들러가 실행되지 않으므로 변수는 항상 'false'가됩니다. – Barmar

+0

"clicked = false"가 ajax 결과 메서드에 포함될 수 있으므로 async .. – Hacketo

+0

그럴 경우 원래 코드가 작동합니다. – Barmar

0
var clickTime = -1; 

$('.selector').click(function() { 
    if (clickTime == -1) { 
     clickTime = new Date().getTime(); 
    } 
    var end = new Date().getTime(); 
    var time = end - clickTime; 
    if (!$(this).hasClass('selected') && time < 500){ 
     e.addClass("selected"); 
     // Do other stuff 
     clickTime = new Date().getTime(); 
     } 
}); 

핸들러를 연결하는 "하나"방법을 사용하십시오