2012-07-06 5 views
2

스택 오버플로에서이 문제의 변형을 발견했지만 내 특정 상황과 일치하는 것이 없습니다. 누군가가 통찰력을 가지기를 바랍니다.버튼을 활성화하기 전에 모든 스크립트가 완료 될 때까지 기다리십시오.

지금 당장 나는 누를 때 항목 목록을 생성하는 단추 (기술적으로 앵커 태그)가있는 웹 응용 프로그램에서 작업하고 있습니다. 문제는 사용자가이 버튼을 두 번 연속 빠르게 누르면 목록이 두 번 스폰됩니다. 버튼은 중복을 방지하기 위해 목록을 지우기 전에 목록을 지우는 것이지만 스크립트가 상호 작용하는 방식에 대해 곤충. 이 버튼은 서버에 대한 ajax 호출을 작성하여 목록을 생성합니다.

이제 단추를 눌렀을 때 부울 값을 1로 바꾸고 단추가 0이 될 때까지 아무 것도하지 않게하여이 버그를 수정했습니다. 이것은 코드에서 어디에서 0으로 다시 값을 설정했는지에 관계없이 작동하지 않는 것 같습니다. 페이지로드 이후뿐만 아니라 ajaxGet 함수의 끝에 넣으려고했지만 두 솔루션 모두 작동하지 않습니다.

페이지로드 및 렌더링이 완전히 끝나면 버튼을 사용 가능하게 설정하는 것이 이상적입니다. 궁극적으로 사용자가 버튼을 두 번 연속으로 누르지 못하게하는 방법이 필요합니다. 나는 이것을 위해 타이머를 사용하는 것을 고려해 봤지만, 나는 그것에 의지 할 필요가 없다.

아이디어가 있으십니까? 코드 스 니펫을 원한다면 알려주십시오.

=========================

편집 : 답장을 보내 주셔서 감사합니다. 나는이 문제를 해결하기 위해 Fibrewire의 대답의 변종을 사용했고, 그것은 훌륭하게 작동합니다. 단추가 호출하는 메서드의 시작 부분에 다음 코드를 넣습니다.

if (actionsDisabled == 1) { 
    return; 
}//if 
else { 
    actionsDisabled = 1; 
    setTimeout("actionsDisabled=0;", 1000); 
}//else 

actionsDisabled는 전역 부울입니다. 가능한 한 밀폐되어 있지 않을 수도 있습니다 (특히 목록로드에 1 초 이상 걸리면 문제가 발생합니다). 우아하고 기능적이며 서버 요청을 줄이는 보너스가 추가됩니다 (트래픽이 문제가 생기면 5 초나 10 초에 한 번 통화를 제한 할 수 있습니다. 다시 한 번 감사드립니다!

+0

나는 우리가 문제를 표현하기 위해 몇 가지 예제 코드를 볼 필요 해요 생각 후. –

+0

은 ajax'complete' 이벤트에 의해 삭제되고 앵커'click' 이벤트에 의해 조사되는 플래그를 사용해야하는 것처럼 들립니다. – jbabey

+0

나는 아마도 그것을 단순화하는 것이지만 왜 한번에 그것을 묶어서 코드 블록의 끝에서 다시 바인딩 할 수는 없을까? – Snuffleupagus

답변

1

당신이 첫 번째 클릭 후 버튼을 비활성화 할 수 있습니다

Disabling the button after once click

당신은 당신이 다시 활성화 setTimeout() 메서드를 사용하여 나중에 다시 버튼을 클릭 할 수 있도록 사용자가 필요로하는 경우 그것은 간단한 일시 정지

http://www.w3schools.com/jsref/met_win_settimeout.asp

+1

모질라 문서 도구를 사용해보십시오. https://developer.mozilla.org/en/DOM/window.setTimeout보다 w3cschools가 좋습니다. 확실하지 않은 경우 다음을 확인하십시오. http://w3fools.com/ – Jasper

관련 문제