【问题标题】:Javascript prompt alternative in Loop循环中的 Javascript 提示替代
【发布时间】:2017-08-28 13:10:39
【问题描述】:

因此,我可以使用<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 个值推入数组只是一个示例。假设我想创建一个游戏,其中循环将通过“向上”移动和通过“向下”输入向下移动。我希望能够在循环期间请求用户输入,类似于提示的方式,但不使用提示。

【问题讨论】:

  • 不要使用循环。只需在用户添加项目后检查x的长度,然后决定是否要请求另一个添加,或者停止询问
  • 只是一个想法,当您有 5 个条目时,您可能希望禁用输入/按钮。在这种情况下,您只需在每次按下按钮时检查条目数。像这样: $('#buttonid").on('click', function() { if (i >= 5) { $('#buttonid').prop('disabled', 'disabled'); } });
  • 随着更新,问题现在太宽泛了。

标签: javascript jquery prompt


【解决方案1】:

你没有。你完全改变了你的逻辑,完全失去了循环:

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:它适用于您在问题中显示的内容,是的。这也是您处理所描述内容的方式。关键是您要接受与用户交互的异步、基于状态的特性。您不需要循环,您可以使用上面的事件响应模型使您的操作依赖于下一个输入。
  • @CaptainObvious:TJ 回答了你的问题。与编写程序时的所有问题一样,您将使用基本的问题解决技能并使用您获得的知识来找出解决方案。没有一种技术可以涵盖您将来可能遇到的所有情况。您只能处理手头的问题,这就是 TJ Crowder 在这个答案中所做的。您面临的更基本的问题是不了解循环构造的用途。他们立即执行他们的代码,除了停止循环的条件之外,不考虑其他任何事情。
  • 我想我明白了。我不需要一个循环来满足我手头的需要。但最后一个问题:有没有办法让输入/按钮像循环中的提示一样工作?
  • @CaptainObvious:如果您的意思是“在我收集输入时停止此语句和下一个语句之间的代码”,不,没有。 promptalertconfirm 是可怕的特殊情况。
猜你喜欢
  • 2012-09-20
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 2021-09-05
相关资源
最近更新 更多