2010-01-08 2 views
1

함수를 양식 제출 단추에 바인딩했습니다. 이 함수가 iframe 대화 상자를 팝업하고 사용자 상호 작용을 기다린 다음 양식을 제출합니다 (ajax 게시물을 통해).Javascript 함수는 위 라인의 함수가 반환되기를 기다리지 않고 실행됩니까?

하지만 대화 상자 호출이 아직 반환되지 않은 경우에도 대화 상자가 튀어 나오지만 함수가 계속 실행되고 ajax 게시를 수행한다는 것을 알 수 있습니다. 해당 대화 상자 함수가 반환 될 때까지 코드 실행을 멈추는 방법이 필요합니다.

나는이 같은 것을 :이 자바 스크립트의 예상되는 행동이라고 생각하지만 극복하는 방법을 잘 모르겠습니다

submitForm: function() { 

     <call a function that pops up a dialog, doesn't return until user interacts> 

     new Ajax.Updater('dialogContainer', url, { 
       ........... 
      } 
     });  

     return false; 
    } 

...

답변

3

자바 스크립트가 순차적으로 실행되므로 분명히 iframe 대화 상자를 호출하기 위해 이 호출되지 않습니다.은 사용자 상호 작용을 기다립니다. & 즉시 반환됩니다. 내 생각 엔 대화 상자를 팝업하는 데 사용하는 라이브러리에는 사용자 액션을 기반으로 실행할 콜백 함수가 있습니다. 따라서 new Ajax.Updater(....); 코드를 콜백 함수로 옮겨야합니다.

+0

감사합니다. 즉시 반환 대화 상자 함수에 대한 소란,하지만 페이스 북의 API 호출 대화 함수 내에서 콜백을 가지고 있으며, 그것은 완벽하게 작동합니다 – ambertch

2

필자가이 기본적인 지식을 바탕으로 javascript 나는 대화 상자가 코드 (코드라는 코드)와 독립적으로 작동하는 한 정상적인 동작이라고 생각한다.

대화 상자에 javascript가 실행되고 있습니까? 왜냐하면 내가 가지고 있다고 생각하기에, 함수가 매개 변수 (원하는 코드를 실행할 콜백)를 전달할 수 있으며,이 함수는 반환 할 때 대화 상자에서 호출됩니다.

1

아약스를 통해 첫 번째 함수를 호출해야한다고 말하고 싶습니다. 저는 프로토 타입을 사용하고 있다고 생각합니다.

Ajax.Request 및 Ajax.Updater Objects에는 onComplete 콜백 함수가 있습니다. 그런 다음 onComplete 함수에서 두 번째 함수를 실행할 수 있습니다.

의 onComplete : 함수() { 새로운 Ajax.Updater에 ('dialogContainer', URL { ........... }}); }

0

대상 웹 클라이언트가 Internet Explorer 인 경우에만 window.showModalDialog를 사용할 수 있습니다. 그것은 부모 창에서 자바 스크립트 스레드를 차단하는 좋은 속성이 있습니다.

showModalDialog가 Firefox에서 구현되었지만 Firefox에서 해당 기능이 차단되는지 여부는 알 수 없습니다.

관련 문제