2011-05-03 9 views
4

내 문제는 여기에 내가 호출 된 후 기간 (예 : 5 초 후)에 대한 자바 스크립트 함수를 호출하는 피하기 싶습니다.자바 스크립트 여러 호출을 피하기

저는 자바 스크립트 함수를 호출하는 링크를 만들었습니다. 사용자가 두 번 클릭하면 두 번 호출됩니다. 나는 그것을 피하고 싶습니다.

덕분에, 데반 ​​

답변

5

나는 그것을 처리 할 수있는 가장 합리적인 방법은 그것을 클릭하면 링크를 비활성화하는 것입니다 생각하고 함수 실행이 완료되면 다시 활성화. 당신이 정말로 함수가 호출 된 후 일정 시간을 기다릴 필요가 있다면 ... 뭔가처럼, 당신이 jQuery를 사용할 수 있습니다

$('#button').click(function() { 
    $(this).attr("disabled", "true"); 
    doTheFunction(); 
    $(this).attr("disabled", "false"); 
}); 

가정, 당신은 버튼을 다시 활성화의 setTimeout을 사용할 수 있습니다.

$('#button').click(function() { 
    $(this).attr("disabled", "true"); 
    doTheFunction(); 
    var btn = $(this); 
    setTimeout(function() { 
    btn.attr("disabled", "false"); 
    }, 5000); // reenable the button 5 seconds later 
}); 

편집 : 링크는

(아래 코멘트), 나는 당신이 옳은 것 때문에, 무효 인 속성이 없습니다 추가 및 클래스를 제거하여 위의 시뮬레이션 것입니다. 이 전화를 완료 한 후

$('#link').click(function() { 
    if ($(this).hasClass('disabled_link')) { 
    return; 
    } 
    $(this).addClass("disabled_link"); 
    doTheFunction(); 
    var link = $(this); 
    setTimeout(function() { 
    link.removeClass("disabled_link"); 
    }, 5000); // reenable the button 5 seconds later 
}); 
+1

나는 함수 호출에 태그를 사용하고 있습니다. 그리고 나는 태그에 disable 속성이 없다고 생각합니다. 틀 렸으면 고쳐줘. – Devan

+0

@Devan; 내 답변 편집, 도움이 되길 바랍니다! – goggin13

1

당신은 링크가 아닌 버튼을 사용하고 있기 때문에, 그리고 jQuery를가 (분명히), 여기에 5 초 동안 아무것도 기능을 중지하는 방법 (또는 무엇이든 당신이 원하는 지연) 뭔가 :

var someFn = (function() { 

    var lastCalled; 

    return function() { 
    var now = new Date(); 
    var limit = 5000; // minimum milliseconds between calls 

    if (!lastCalled || (now - lastCalled) > limit) { 
     lastCalled = now; 
     // do stuff 
     alert('hey'); 
    } else { 
     return; 
    } 
    } 
}()); 

클라이언트 스크립트는 특히 신뢰할 수 없습니다 때문에 것은 이런 종류는 일반적으로, 비록 서버에서 처리됩니다 - 당신이 dealy 가 구현 될 것이라는 점을 보장 할 수는 상관없이 전략은 사용하지 .

관련 문제