2016-08-11 3 views
1

jquery-confirm (https://craftpip.github.io/jquery-confirm/)을 사용하여 양식의 취소를 확인했지만 작동하지 않습니다. 내 기능은 JQuery와 확인의 결과를 반환하지 않습니다 :jquery-confirm을 사용하여 값 반환

function cnf(cntn, fn, prm) { 
    var res = false; 
    $.confirm({ 
     title: "", 
     content: cntn, 
     confirmButton: "Yes", 
     cancelButton: "No", 
     confirm: function() { res = true; fn(prm); }, 
     cancel: function() { } 
    }); 
    return res; 
} 
function emptyfn() { } 
function link() { 
    return cnf("Cancel changes?", emptyfn); 
} 

... 

<form method="post" action="whatever.php"> 
    <label for="test">Test Input</label> 
    <input type="text" class="form-control" id="test" maxlength="40" name="test" autofocus> 
    <input type="submit" name="button" value="Submit" class="btn-primary"> 
    <input type="submit" name="button" value="Cancel" class="btn-primary" onclick="return link();" formnovalidate> 
</form> 

(내가이 예에서는 "FN"와 "PRM을"필요하지 않습니다 알지만, 다른 곳에서 사용하기 위해 코드를 일반화하는 것을 시도하고있다) . 내가 경고를 추가하여 코드를 디버깅하려고 할 때

는 상황이 이상한 가서 경고는 확인 전에 출연 :

function link() { 
    var tmp = cnf("Cancel changes?", emptyfn); 
    alert(tmp); 
    return tmp; 
} 

가 어떻게 코드를 수정할 수 있습니다, 왜 내 디버깅 코드가 밖으로 실행됩니까 순서 (함수의 반환 값과 관련이 있습니까?)

+1

불가능 JavaScript에서 대기가 없으므로 비동기 호출을 일시 중지 할 수 없기 때문에 사용자가 선택하면 스크립트에 콜백이 포함됩니다. – epascarello

+0

@epascarello 네이티브 알리미를 호출하면 경고창을 닫을 때까지 스크립트 실행을 중지합니다. – Nikita

+1

예, 네이티브 알리미가 확인하고 확인하는 방법입니다. JavaScript에서는 해당 기능을 다시 만들 수 없습니다. – epascarello

답변

-2

자바 스크립트가 비동기 함수이기 때문에 $ .confirm가 실행될 때까지 기다리지 않으므로 코드가 작동하지 않습니다. 콜백 함수를 사용하는 가장 간단한 방법.

function workWithRes() { 
... 
res = true; 
//and some stuff that should executed after confirm created 
} 
var res = false; 

function cnf(cntn, fn, prm, callbackFn) { 
    $.confirm({ 
     title: "", 
     content: cntn, 
     confirmButton: "Yes", 
     cancelButton: "No", 
     confirm: function() { fn(prm); callbackFn(); }, 
     cancel: function() { } 
    }); 
} 

다른 해결책으로는 javascript에서 async calls에 대해 읽으십시오.

+0

좋아, 나는 내 부분에서 실수였던 res 변수의 사용에 동의하지 않는다. 하지만 예, document.getElementById ("form")을 포함하는 콜백을 사용합니다. submit()이 트릭을 수행합니다. – tyebillion