2017-05-26 30 views
0

我是javascript新手。我想讓一個javascript函數等待用戶輸入。我知道我可以使用提示,但窗口看起來不太好,所以我想讓自己的提示窗口。我搜索並發現我可以使用jquery ui或使用html + css + javascript創建我的窗口,但我的問題是:如果我創建自己的提示窗口,函數會一直等待,直到輸入爲止?或者它是否在給定輸入後調用一個函數?我自己的提示窗口是否會停止JavaScript執行?

這基本上就是我想做的事:

function() 
{ 
    var input = MyPrompt(); //Wait here for a user input, like a c scanf 

    //Rest of the function who will use the input given 

} 

我真的需要JavaScript函數停止執行,如scanf或提示會做。因爲大部分的解決方案,我發現只需調用一個函數,你點擊「確認」按鈕

感謝

+1

能爲您提供MyPrompt代碼?如果你使用默認的瀏覽器提示,比如'prompt()','alert()'或者confirm()',那麼你會阻止JS的執行 –

+0

是的,我知道如果我使用alert() promp()或confirm()它會停止JS執行,但是我想創建一個MyPrompt()函數,它會做同樣的事情,但有更好的GUI,問題是我在線看到的所有解決方案都不會停止JS執行,但按下按鈕後調用新函數 –

+0

只需使用'setInterval()'來檢查代碼中的提示是否已結束。雖然不是,但別再打電話了。 – Zenoo

回答

2

由JavaScript的性質後,就沒有辦法爲「暫停」 JavaScript應用程序的執行。這就是爲什麼在JavaScript中,大多數外部呼叫處理程序(如URL調用或NodeJS中的文件系統操作)都以回調方式實現。

EcmaScript規範創作者正試圖提供async/awaitfeatures,但實際上這只是promises的語法糖。

最好的辦法是創建自己的「提示」,或者使用已經存在的like this的任何,把你想要做什麼獲取用戶輸入的「回調」到提示後:

showMyPrompt({ 
    success: function(value){ console.log('User said ', value); }, 
    close: function(){ //handle pressing of a "cancel" button if needed } 
}) 

和在對話框的功能:

function showMyPrompt(params){ 
    // show your prompt here 
    $('.dialog-ok-button').click(function(event){ 
    event.preventDefault(); 
    var value = $('.my-prompt-input').val(); 
    params.success && typeof params.success == 'function' && params.success(val); 
    }); 

    // and do similar for "cancel" 
} 
+0

是的,但我已經說過,我想要一個函數,它將停止像prompt()這樣的執行並顯示一條消息,而不是在用戶給出輸入後調用另一個函數的函數 –

1

一個簡單的async/await基礎的解決方案可能是這樣的。 請注意,您的原始功能是以相同的方式寫入的 - 除了添加asyncawait

function MyPrompt() { 
 
    return new Promise((resolve, reject) => { 
 
     let dialog = document.createElement('dialog'); 
 
     dialog.innerHTML = ` 
 
      <form> 
 
       <input type="text" required> 
 
       <button type"submit">Ok</button> 
 
      </form> 
 
     `; 
 
     document.body.appendChild(dialog); 
 
     dialog.showModal(); 
 
     dialog.querySelector('form').addEventListener('submit', e => { 
 
      e.preventDefault(); 
 
      dialog.remove(); 
 
      resolve(dialog.querySelector('input').value); 
 
     }); 
 
    }); 
 
} 
 

 
(async function() 
 
{ 
 
    var input = await MyPrompt(); //Wait here for a user input, like a c scanf 
 

 
    console.log(input); 
 
    //Rest of the function who will use the input given 
 

 
}());

+0

這個問題是您必須打開函數誰調用MyPrompt()到一個異步函數,我不想這樣做。 但是,謝謝;) –