2017-05-26 31 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()到一个异步函数,我不想这样做。 但是,谢谢;) –