2013-05-21 1 views
0

나는이 것이 아주 간단한 것 같은 느낌이 들지만, 나는 그것을 알아낼 수없는 것 같습니다. 작업이 완료된 후에 값을 반환하는 함수가 필요합니다. 나는이 작업을 수행 할 때 상자도 body 태그에 추가되기 전에 '정의되지 않은'으로jQuery - 한 번 돌아가서 함수를 끝내십시오.

var msg = my_function(); 
alert(msg); 

function my_function(){ 
    box = $("<div>"); 
    button = $("<span>submit</span>").click(function(){ 
    box.remove(); 
    return "Hello World!"; 
    }); 
    $("body").append(box); 
} 

는 그러나 MSG를 반환합니다. 이 줄에 따라 '완료'또는 무언가를 추가하려면 어떻게합니까?

+0

당신은 이벤트 리스너를 추가하고 있습니다. 청취자는 클릭 할 때마다 한 번씩 여러 번 실행할 수 있습니다. 반환 값을 갖는 것은 이치에 맞지 않습니다. – Halcyon

답변

0

잘못된 장소에 반품하십시오. 콜백 함수 내의 return 문은 아무 것도하지 않습니다.

my_function(function(msg) { alert(msg); }); 

function my_function(callbackFn){ 
    box = $("<div>"); 
    button = $("<span>submit</span>").click(function(){ 
    box.remove(); 
    callbackFn("Hello World!"); 
    }); 
    $("body").append(box); 
} 

하지만 당신은 어딘가에 페이지에 그 span을 넣어해야합니다

var msg = my_function(); 
alert(msg); 

function my_function(){ 
    box = $("<div>"); 
    button = $("<span>submit</span>").click(function(){ 
    box.remove(); 
    return "Hello World!"; // this return does not make sense 
    }); 
    $("body").append(box); 
    return "Hello World!"; // return here what you want 

}

+0

하지만 버튼을 클릭 할 때까지 반환하지 않으려면 어떻게해야합니까? – r0tterz

+0

그러면 콜백으로하고 싶은 것을 전달해야합니다. – rtcherry

+0

바로. @ rtcherry 대답을 보면, 정확히 할 것입니다. – iurisilvio

0

나는 이것이 당신이 원하는 생각합니다.

3

my_function 사용자가 작업을 수행 할 때까지 대기하지 않습니다. .click()에 전달하는 것은 이벤트 핸들러로 첨부되어 이벤트가 발생할 때 실행되는 다른 함수입니다. 이를 비동기식 (이 경우에는 이벤트 구동 형) 동작이라고합니다.

당신이 찾고있는 반환 값을 얻는 트릭은 my_function에 자신의 콜백을 제공하는 것입니다.이 콜백은 사용할 수있을 때 그 반환 값으로 호출됩니다. (당신이 방법에 의해 몸에 추가해야합니다 그렇지 않으면 아무데도 나타나지 않을 것)이 콜백 누군가가 버튼을 클릭 언제든지 실행됩니다 참고 :

당신이 원하는 무엇이든
var myCallback = function(msg) { 
    alert(msg); 
} 

var msg = my_function(myCallback); 

function my_function(callback) { 
    var box = $("<div>"); 
    var button = $("<span>submit</span>").click(function(){ 
    box.remove(); 
    callback("Hello World!"); 
    }); 
    $("body").append(box).append(button); 
} 
+0

완벽하게 작동했습니다. 감사합니다. – r0tterz

0

, 당신은 그것을 당신에게 넣어야합니다.

click(function() { ... } 

. 설명 :이 함수는 실제로 "클릭"이 발생한 후에 만 ​​무언가를 반환합니다.

"my_function()"은 클릭 후 아무 것도 반환하지 않으므로 "msg"는 항상 정의되지 않습니다! -> "경고"는 "msg"가 할당 될 때까지 기다리지 않습니다 ...

관련 문제