나는 Dajaxice/Dajax가 처리하는 동안 버튼 사용을 막으려하고있다. Dajax가 완료되기까지 오랜 시간이 걸린다면 두 번째 Dajaxice onclick 호출이 수행되지 않도록해야합니다.Djaxice를 호출하기 전에 jQuery를 실행하여 onclick을 비활성화하는 방법은 무엇입니까? 현재 해결책은 못생긴다
Dajax/Dajaxice readthedocs, stackoverflow를 확인했으며 Google에서 해결책을 찾지 못했습니다. 그래서 해킹 ....
내가 같이 갈 수있는 기본 버튼에 Dajaxice를 사용하기 시작하기 시작 :
<button id="btn" onclick="Dajaxice.example.myexample(Dajax.process);">
Click here!
</button>
그러나 Dajax가 처리하는 동안 나는 온 클릭 속성 값을 제거 할. 내가 먼저 콜백 기능에 온 클릭을 제거하려고했으나 콜백이 Dajaxice 호출이 끝날 때까지 호출되지 않기 때문에 그것은 그 시점에서 너무 늦기 :
<button id="btn" onclick="Dajaxice.example.myexample(my_js1_callback);">
Click here!
</button>
<script>
function my_js1_callback(data){
$("#wkbtn").attr('onclick', ""); /* Too Late */
Dajax.process(data);
}
</script>
문제는 그 Dajaxice 기능 에는 myExample은 onclick 속성 값이 분명하기 전에 호출됩니다 (호출해야하거나 호출 할 필요가 없기 때문에). 나는의 Dajaxice 기능이 실행되기 전에 onclick 을 지우고 싶습니다. 내 최신 시도에서
, 나는 jQuery를에 대신의 OnClick에서 Dajaxice 호출 이동 :
<button id="btn" onclick="my_dajaxice_myexample();">
Click here!
</button>
<script>
function my_js1_callback(data){
Dajax.process(data); /* process callback */
}
function my_dajaxice_myexample(){
$("#wkbtn").attr('onclick', ""); /* runs before Dajaxice */
$(function(){Dajaxice.example.myexample(my_js1_callback);})
}
</script>
그것은 작동을하지만, 추한 것 같다. 이 벨트 앤드 멜빵의 과잉 공격 방식보다 더 나은 무언가가 있어야 할 것 같습니다.
제안 사항?
편집 : 배쉬의 답변에 따라 업데이트 : jQuery를/Dajaxice 코드
<button id="btn">
Click here!
</button>
:
<script>
$('#btn').click(function(){
$('#btn').attr("disabled", "disabled");
/* other pre-Dajaxice changes here */
Dajaxice.example.myexample(Dajax.process);
});
</script>
이 조금, 나는 "Dajax을 교체의 가능성을 가지고 좋아 확장. 프로세스 "사용이 위의 예제에서이 수정 된 jQuery/Dajaxice 코드에서 Dajaxice post JavaScript 코드를 실행할 수있는 함수 호출을 사용합니다.
<script>
function my_callback(data){
/* post-Dajaxice call, pre-Dajax execution changes here */
Dajax.process(data); /* process callback */
/* post-Dajax execution changes here */
}
$('#btn').click(function(){
$('#btn').attr("disabled", "disabled");
/* other pre-Dajaxice changes here */
Dajaxice.example.myexample(my_callback);
});
</script>
불행히도 실행 순서가 중요합니다. FF로 예제를 실행하고 두 문서를 모두 깨뜨린 경우.getElementBy 및 attr이 라인을 비활성화하면 getElement는 항상 first를 실행합니다. 이는 버튼이 비활성화되기 전에 Dajaxice가 실행될 것임을 나타냅니다. btn 클릭 기능을 getElement _into_로 옮겨서 btn이 비활성화 된 후에 실행해야하는 것 같습니다. – ChrisFreeman
제 잘못, 분명히 Dajaxice() 함수가 호출되기 전에 ** 버튼을 지울 필요가 있다고 말한 부분을 읽지 않았습니다. 예, 그렇게 할 수 있으며 버튼이 비활성화 된 후에도 함수가 실행되도록하려면 속성을 확인할 수 있습니다. 업데이트 된 jsfiddle : http://jsfiddle.net/37VTL/1/ (답변을 적절하게 업데이트하겠습니다.) 잘만되면 필요한 기능입니다. –
두 기능을 같은 기능에 넣어 주문을 강제하는 것은 필요한 것입니다. 나는 onclick 속성에서 Dajaxice 호출로 문제를 해결하려고 노력하는 함정에 빠졌다고 생각합니다. 귀하의 대답에 대한 한 가지 변경 사항은 추가 if-disabled-check을 사용하지 않고 코드에 의존하는 것입니다. 내 추론은 코드 오더가 작동하지 않을 수있는 먼 기회 였을 때 if-disable로 Dajaxice가 실행되는 것을 방지하기 때문에 체크가 작동하지 않을 것입니다. * 그런 다음 버튼이 비활성화되면 잠금이 해제됩니다. 죽은 단추 및 아무 실행. – ChrisFreeman