2013-12-17 4 views
0

나는 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> 

답변

2

나는이 충분해야하고 믿고 :

<button id="btn"> 
    Click here! 
</button> 

그리고 jQuery를 사용하여이 작업을 수행 :

$('#btn').click(function(){ 

    $('#btn').attr("disabled", "disabled"); 

    if($('#btn').attr("disabled")) { 
     Dajaxice.example.myexample(Dajax.process); 
    } 
}); 

간단한 jsfiddle이 http://jsfiddle.net/37VTL/1/

을 보여 그대로

은 HTML을 남겨주세요

버튼을 사용 중지 한 다음 버튼이 실제로 사용 중지되었는지 확인합니다. d이면 함수를 실행합니다. 단추를 사용하지 않도록 설정 한 후에 단추가 비활성화되어 있는지 확인하는 것은 무리가 있지만 기능은 원하는 방식으로 실행되도록하는 것입니다.

+0

불행히도 실행 순서가 중요합니다. FF로 예제를 실행하고 두 문서를 모두 깨뜨린 경우.getElementBy 및 attr이 라인을 비활성화하면 getElement는 항상 first를 실행합니다. 이는 버튼이 비활성화되기 전에 Dajaxice가 실행될 것임을 나타냅니다. btn 클릭 기능을 getElement _into_로 옮겨서 btn이 비활성화 된 후에 실행해야하는 것 같습니다. – ChrisFreeman

+0

제 잘못, 분명히 Dajaxice() 함수가 호출되기 전에 ** 버튼을 지울 필요가 있다고 말한 부분을 읽지 않았습니다. 예, 그렇게 할 수 있으며 버튼이 비활성화 된 후에도 함수가 실행되도록하려면 속성을 확인할 수 있습니다. 업데이트 된 jsfiddle : http://jsfiddle.net/37VTL/1/ (답변을 적절하게 업데이트하겠습니다.) 잘만되면 필요한 기능입니다. –

+0

두 기능을 같은 기능에 넣어 주문을 강제하는 것은 필요한 것입니다. 나는 onclick 속성에서 Dajaxice 호출로 문제를 해결하려고 노력하는 함정에 빠졌다고 생각합니다. 귀하의 대답에 대한 한 가지 변경 사항은 추가 if-disabled-check을 사용하지 않고 코드에 의존하는 것입니다. 내 추론은 코드 오더가 작동하지 않을 수있는 먼 기회 였을 때 if-disable로 Dajaxice가 실행되는 것을 방지하기 때문에 체크가 작동하지 않을 것입니다. * 그런 다음 버튼이 비활성화되면 잠금이 해제됩니다. 죽은 단추 및 아무 실행. – ChrisFreeman