2014-09-18 5 views
5

Alertify를 사용하여 코드를 수정하고 스타일을 지정하기로 결정했습니다. 내 예전의 코드 :확인 전에 Alertify가 실행 중입니까?

<script type="text/javascript"> 
$('.ask').click(function(){ 
    var answer = confirm('<?php echo $this->translate('Delete route?'); ?>'); 
    return answer; 
}); 

내가 확인을 눌러 PHP 스크립트가 실행 기록을 삭제합니다. Javascript는 true 또는 false를 반환합니다.

내가 Alertify와 함께 가지고있는 문제는 심지어 언론의 ok를 누르거나 취소하기 전에 PHP 스크립트가 실행되기 전에 발생합니다. 다음은 코드입니다.

$(".ask").click(function(event){ 
alertify.confirm("Are you sure you want to commit your reservation?", function (e) { 
    if (e) { 
     return true; 
    } else { 
     return false; 
    } 
}); 

});

나는 비슷한 문제를 가진 사람들을보고 나는 기본적으로 (이 의미가 있습니다) 코드 방지 사용할 필요가 있다고 보았다

$(".ask").click(function(event){ 
event.preventDefault(); // cancel submit 
alertify.confirm("Are you sure you want to commit your reservation?", function (e) { 
    if (e) { 
     return true; // submit form skipping jQuery bound handler 
    } else { 

    } 
}); 

을});

그 경우에는 PHP 스크립트가 실행되기 전에 ok/cancel을 실행하지만 버튼 중 하나를 누르면 실행되지 않습니다. 아무 반응이 없습니다. 도움이 필요하십니까?

답변

5

JavaScript의 비동기 성격에 부딪 히고 있습니다. 원래 코드에서 confirm 대화 상자가 열려있는 동안 모든 JavaScript의 실행이 일시 중지되었으므로 직접 반환 값을 사용할 수 있습니다. 그러나 alertify.confirm을 사용하면 스크립트의 실행이 일시 중지되지 않으므로 클릭 핸들러가 즉시 반환되고 그 주변의 코드도 실행됩니다. 즉 PHP 스크립트를 호출하는 코드입니다. alertify.confirm 콜백 함수 내에서 return true;을 시도하면 해당 내부 함수에서 alertify 코드로 돌아가며 외부 클릭 핸들러 함수에서 반환되지 않습니다.

당신이해야 할 일은 콜백 메소드가 아닌 사용 가능한 콜백 메소드로 작업하는 것입니다. 다음과 같이 코드를 재구성하는 것이 좋습니다. .aska 태그 것을 확인 후, 다음 작동합니다 :

$(".ask").click(function(event){ 
    var loc = $(this).attr('href'); 
    alertify.confirm("Are you sure you want to commit your reservation?", function (e) { 
    if (e) { 
     document.location.href = loc; 
    } 
    }); 
    //prevent link from being followed immediately on click 
    return false; 
}); 
+0

일을하지만, 다른 방법으로 - 대신 콜백 함수의 - 당신이 사용할 수있는'$ .Deferred()'. – Regent

+0

는 작동하지 않을 것입니다. 여기에서 폼이 확인을 기다리지 않거나 취소 할 것입니다. http://jsfiddle.net/6zNaP/36/ – user3819192

+0

'.ask '는 실제로 어디에도 지정되어 있지 않은 양식 제출 버튼이라고 가정합니다. 그것을 제출하지 않는 정상적인 단추로 바꾸십시오. 그 때도 기본 동작을 방지 할 필요가 없으므로 페이지에 복잡성이 추가되면서 다른 원하지 않는 문제가 발생할 수 있습니다. –