JavaScript循环中的prompt替代方案

4

因此,我可以使用一个 <input type="text"> 和一个 button 来处理在按钮点击时输入的值,而不是使用提示框。例如:

var x = [];

$('button').on('click', function(){
  x.push($(input[type="text"]).val());  
});

然而,在循环中:

var y=0;
var z=[];
do {
  z.push(prompt('input value'));
  y++;
}
while (y<5);

循环将提示用户输入一个值,用户输入该值,提示将该值分配给数组,然后循环将再次提示,直到y达到5。
而不是使用提示,我想使用文本字段输入和按钮来完成。如何让循环暂停,等待用户输入文本,并在每次达到循环的那个部分时通过单击按钮提交?
编辑:将5个值推入数组只是一个例子。假设我想创建一个游戏,循环将使用"上升"和"下降"输入向上或向下移动。我希望能够在循环期间请求用户输入,类似于提示的方式,但不使用提示。

4
不要使用循环。在用户添加一个项目后,只需检查 x 的长度,然后决定是否要继续询问添加另一个项目,或停止询问。 - musefan
只是一个想法,当您已经有5个条目时,您可能希望禁用输入/按钮。在这种情况下,您只需要每次点击按钮时检查条目数量即可。类似于这样:$('#buttonid").on('click', function() { if (i >= 5) { $('#buttonid').prop('disabled', 'disabled'); } }); - Nguyen Tuan Anh
随着更新,这个问题现在已经太宽泛了。 - user1106925
1个回答

8
你不需要这样做。你需要完全改变你的逻辑,放弃循环:
var z = [];
$('button').on('click', function() {
    z.push($(input[type="text"]).val());
    if (z.length === 5) {
        // Do what you would have done after the end of the loop here
    }
});

您已编辑了问题并在下面发表评论,说明接下来要做什么可能会因输入而异。这不是问题,您只需将事件响应模型应用于新要求即可。例如,您说:

...假设我想创建一个游戏,在该游戏中,循环体将通过“上”和“下”输入向上移动和向下移动。

那么:

$('button').on('click', function() {
    switch ($(input[type="text"]).val().toLowerCase()) {
        case "up":
            // Do the "up" thing
            break;
        case "down":
            // Do the "down" thing
            break;
    }
});

你可以采用多种不同的方式来处理调度,不一定是使用switch语句。例如:

var actions = {
    up: function() {
        // Do the "up" thing
    },
    down: function() {
        // Do the "down" thing
    }
};
$('button').on('click', function() {
    var action = actions[$(input[type="text"]).val().toLowerCase();
    if (action) {
        action();
    }
});

等等,关键是不要迭代工作(我做这个,我得到那个输入,我做下一步,我得到更多的输入),而是要以反应式方式工作:我得到输入,我做某些事情。这可能需要一些状态管理(记住你在哪里)超出了上面显示的内容(第一个示例具有状态管理:我们检查z的长度以查看我们收集了多少输入)。


谢谢回复。如果我只是想要请求5个输入并将其推入数组,那么这将起作用。然而,假设我想创建一个游戏,我的操作取决于下一个输入 - 在这种情况下,我需要一个循环,并且我想学习如何使文本字段替代提示。 - CaptainObvious
1
@CaptainObvious:是的,它适用于你在问题中展示的内容。这也是你描述的方式。关键是你要接受与用户交互的异步、基于状态的本质。你不需要循环,你可以使用上面的事件响应模型使你的操作依赖于下一个输入。 - T.J. Crowder
1
@CaptainObvious:TJ已经回答了你的问题。在编写程序时,像所有问题一样,您需要运用基本的问题解决技能并利用您所掌握的知识来找出解决方案。没有一种技术可以涵盖您将来可能遇到的每种情况。您只能处理手头的问题,这就是TJ Crowder在此答案中所做的。您面临的更根本问题是不理解循环结构的作用。它们立即执行其代码,而不考虑除停止循环的条件以外的任何事情。 - user1106925
我想我明白了。对于我手头需要的东西,我不需要循环。但最后一个问题:是否有一种方法可以在循环中使用类似提示框的输入/按钮? - CaptainObvious
1
@CaptainObvious:如果你的意思是“在我收集输入时停止此语句和下一个语句之间的代码”,那么不,没有这样的功能。promptalertconfirm都是可怕的特例。 - T.J. Crowder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接