2010-01-08 82 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; 
    } 

我覺得這是JavaScript的預期行爲,但我不知道如何解決它...在此基礎上我有一個基本的知識

回答

3

JavaScript在瀏覽器中將按順序執行,所以顯然你的調用啓動iframe對話框不會等待用戶交互&立即返回。我的猜測是,無論你用什麼庫來彈出你的對話框,都會有某種回調函數,它會根據用戶操作來執行。所以你只需要將你的new Ajax.Updater(....);代碼轉換成回調函數。

+0

謝謝你!我爲即時返回的對話框函數而煩惱,但對話框函數中的Facebook API調用確實有一個回調,它完美的工作 – ambertch 2010-01-08 22:39:18

2

JavaScript我認爲這是正常的行爲,只要對話框獨立於代碼運行(代碼稱爲它)。

您的對話框中是否有任何JavaScript運行?因爲我認爲,如果有的話,你可以傳遞一個函數作爲參數(回調函數將執行你想要的代碼),當它返回時,將從對話框中調用它。

1

我會說你應該通過ajax調用第一個函數。 我認爲你使用的是原型。

您在Ajax.Request和Ajax.Updater對象中有onComplete回調函數。 然後在onComplete函數中可以運行第二個函數。

的onComplete:函數(){ 新的Ajax.Updater( 'dialogContainer',URL,{ ........... } }); }

0

如果您的目標網頁客戶端僅限Internet Explorer,則可以使用window.showModalDialog。它具有在父窗口中阻止JavaScript線程的好處。

showModalDialog已在Firefox中實現,但我不知道該功能是否在Firefox中被阻止。