JavaScript 함수는 위의 줄에서 반환 할 기능을 기다리지 않고 실행합니까?

StackOverflow https://stackoverflow.com/questions/2026847

문제

기능을 양식 제출 버튼에 묶었습니다. 이 기능이 iframe 대화 상자를 팝업하고 사용자 상호 작용을 기다린 다음 양식을 제출하기를 원합니다 (Ajax 게시물을 통해).

그러나 내가보고있는 동작은 대화 상자 호출이 아직 반환되지 않더라도 대화 상자가 팝되지만 함수가 계속 실행되고 Ajax 게시물을 수행한다는 것입니다. 대화 상자 함수가 돌아올 때까지 코드 실행을 중단하는 방법이 필요합니다.

나는 다음과 같은 것이있다.

submitForm: function () {   

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

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

        return false;
    }

나는 이것이 JavaScript의 예상되는 행동이라고 생각하지만 어떻게 그것을 돌아 다닐 수 있는지 잘 모르겠습니다 ...

도움이 되었습니까?

해결책

브라우저의 JavaScript는 순차적으로 실행되므로 iframe 대화 상자를 시작하는 호출 그렇지 않습니다 사용자 상호 작용을 기다리고 즉시 반환됩니다. 내 생각에 대화 상자를 팝업하는 데 사용하는 라이브러리에는 사용자 조치를 기반으로 실행할 콜백 기능이 일종의 콜백 기능이있을 것입니다. 그래서 당신은 당신의 움직일뿐입니다 new Ajax.Updater(....); 콜백 함수로 코딩합니다.

다른 팁

내가 JavaScript를 가지고있는 기본 지식을 기반으로 대화 상자가 코드와 독립적으로 실행되는 한 정상적인 동작이라고 생각합니다 (코드 호출).

대화 상자에 JavaScript에 실행 되나요? 생각하기 때문에 반환 할 때 대화 상자에서 호출되는 매개 변수 (원하는 코드를 실행하는 콜백)로 함수를 전달할 수 있습니다.

Ajax를 통해 첫 번째 기능을 호출해야한다고 말합니다. 그리고 나는 당신이 프로토 타입을 사용하고 있다고 생각합니다.

ajax.request 및 ajax.updater 객체에 oncomplete 콜백 함수가 있습니다. 그런 다음 oncomplete에서 두 번째 함수를 실행할 수 있습니다.

처럼

oncomplete : function () {new ajax.updater ( 'DialogContainer', url, {...........}}); }

대상 웹 클라이언트가 Internet Explorer 만 있으면 Window.showmodaldialog를 사용할 수 있습니다. 부모 창에서 JavaScript 스레드를 차단하는 멋진 속성이 있습니다.

Showmodaldialog는 Firefox에서 구현되었지만 Firefox에서 함수가 차단되는지 모르겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top