스택 오버플로에서이 문제의 변형을 발견했지만 내 특정 상황과 일치하는 것이 없습니다. 누군가가 통찰력을 가지기를 바랍니다.버튼을 활성화하기 전에 모든 스크립트가 완료 될 때까지 기다리십시오.
지금 당장 나는 누를 때 항목 목록을 생성하는 단추 (기술적으로 앵커 태그)가있는 웹 응용 프로그램에서 작업하고 있습니다. 문제는 사용자가이 버튼을 두 번 연속 빠르게 누르면 목록이 두 번 스폰됩니다. 버튼은 중복을 방지하기 위해 목록을 지우기 전에 목록을 지우는 것이지만 스크립트가 상호 작용하는 방식에 대해 곤충. 이 버튼은 서버에 대한 ajax 호출을 작성하여 목록을 생성합니다.
이제 단추를 눌렀을 때 부울 값을 1로 바꾸고 단추가 0이 될 때까지 아무 것도하지 않게하여이 버그를 수정했습니다. 이것은 코드에서 어디에서 0으로 다시 값을 설정했는지에 관계없이 작동하지 않는 것 같습니다. 페이지로드 이후뿐만 아니라 ajaxGet 함수의 끝에 넣으려고했지만 두 솔루션 모두 작동하지 않습니다.
페이지로드 및 렌더링이 완전히 끝나면 버튼을 사용 가능하게 설정하는 것이 이상적입니다. 궁극적으로 사용자가 버튼을 두 번 연속으로 누르지 못하게하는 방법이 필요합니다. 나는 이것을 위해 타이머를 사용하는 것을 고려해 봤지만, 나는 그것에 의지 할 필요가 없다.
아이디어가 있으십니까? 코드 스 니펫을 원한다면 알려주십시오.
=========================
편집 : 답장을 보내 주셔서 감사합니다. 나는이 문제를 해결하기 위해 Fibrewire의 대답의 변종을 사용했고, 그것은 훌륭하게 작동합니다. 단추가 호출하는 메서드의 시작 부분에 다음 코드를 넣습니다.
if (actionsDisabled == 1) {
return;
}//if
else {
actionsDisabled = 1;
setTimeout("actionsDisabled=0;", 1000);
}//else
actionsDisabled는 전역 부울입니다. 가능한 한 밀폐되어 있지 않을 수도 있습니다 (특히 목록로드에 1 초 이상 걸리면 문제가 발생합니다). 우아하고 기능적이며 서버 요청을 줄이는 보너스가 추가됩니다 (트래픽이 문제가 생기면 5 초나 10 초에 한 번 통화를 제한 할 수 있습니다. 다시 한 번 감사드립니다!
나는 우리가 문제를 표현하기 위해 몇 가지 예제 코드를 볼 필요 해요 생각 후. –
은 ajax'complete' 이벤트에 의해 삭제되고 앵커'click' 이벤트에 의해 조사되는 플래그를 사용해야하는 것처럼 들립니다. – jbabey
나는 아마도 그것을 단순화하는 것이지만 왜 한번에 그것을 묶어서 코드 블록의 끝에서 다시 바인딩 할 수는 없을까? – Snuffleupagus