Javascript prompt()替代方案 - 等待用户响应

时间:2016-05-04 06:53:44

标签: javascript input

我想在一个函数中向用户提出一系列问题。

如果我使用prompt(),可以在一个函数中询问所有问题。

function question(){
    var name = prompt("Enter your name");
    var age = prompt("Enter your age");
}

但如果我尝试使用输入标签,这是不可能的。

function question(){
    document.write("Enter your name");

    // you can't wait until the user responds. It will simply execute all the lines at once. 

    name = document.getElementById("input").value;
    document.write("Enter your age");
    age = document.getElementById("input").value;
}

如果我这样做,我就无法使用输入标记在一个功能中向用户提问。我怎么能等到用户回复?

4 个答案:

答案 0 :(得分:1)

除第一个输入框外,您可以禁用所有输入框。可以在用户对第一个响应时启用第二个。输入线将继续这样。

这是一个小小的示范。请注意,这只是一个示例代码,显示了设计模式。

<input id="name"></input> <button onClick="getInput()">Ok</button>

<input id="address"></input> <button onClick="getInput()" disabled>Ok</button>

和JS

var name, address;

functon getInput() {

    name = document.getelementById("name").value;
    address = document.getElementById("address").value;

    if (address !== "")
        document.getElementById("address").removeAttribute("disabled");   

}

JS中有许多先进的方法。但是你可能应该首先研究这种模式。

答案 1 :(得分:0)

您无法从函数中的相同输入中获取2个不同的值。您应该创建另一个输入或一些按钮来区分变量。例如:`                                                                输入你的名字                                            输入您的年龄                               保存                   var bSave = window.document.getElementById('bSave');         bSave.addEventListener(“点击”,问题);

    var newName = window.document.getElementById('iName');
    var newAge = window.document.getElementById('iAge');

    function question() {
        name=newName.value;
        age=newAge.value;
    }
</script>

`

答案 2 :(得分:0)

prompt()是写HTML而不是要求用户输入function checkQuestion(){ if(document.getElementById("name").value == "") alert('name empty'); if(document.getElementById("age").value == ""); alert('age empty'); } 。您需要的是在用户提交表单之前输入验证,如

{% load staticfiles %}

<!DOCTYPE html>
...
    <link href="{%static 'file.css' %}" rel="stylesheet">
...

答案 3 :(得分:0)

要链接提示,您可以执行以下操作:

const name = prompt("Enter your name");
if (!!name) {
    const age = prompt("Enter your age");
    if(!!age){
      ...
    }
}

或者,如果您可以在项目中使用rxjs 5.5+,则可以使用可观察对象来等待第一个提示。 例如:

of(prompt("Enter your name"))
.pipe(first(), filter((name) => !!name))
.subscribe((name) => {
    var age = prompt("Enter your age")
    if(age) {
        ...
    }
});