Javascript forEach循环跳过模式打开
我有一个包含n个单词的数组。我正在运行一个forEach循环来遍历每个元素,对于每个元素,它应该打开一个带有文本输入的模式,单击一个按钮后,值存储在一个新数组中,模式消失。那么同样的事情也会发生n次 我用prompt测试了它,效果很好。我正在控制台中记录循环中的值,似乎正在发生的事情是数组中的每个字都被记录下来,然后模态仅为最后一个实例打开。不知道为什么 以下是每个循环的详细信息:Javascript forEach循环跳过模式打开,javascript,Javascript,我有一个包含n个单词的数组。我正在运行一个forEach循环来遍历每个元素,对于每个元素,它应该打开一个带有文本输入的模式,单击一个按钮后,值存储在一个新数组中,模式消失。那么同样的事情也会发生n次 我用prompt测试了它,效果很好。我正在控制台中记录循环中的值,似乎正在发生的事情是数组中的每个字都被记录下来,然后模态仅为最后一个实例打开。不知道为什么 以下是每个循环的详细信息: words.forEach(function(word) { console.log(word);
words.forEach(function(word) {
console.log(word);
$('.modal-title').html("Edit value for "+word);
$('#wordModal').modal('show');
$('#submit').click(function() {
let input = $('#elm2').val();
newBody = body.replaceAll("["+word+"]", input);
body = newBody;
$('#wordModal').modal('hide');
})
});
当模式出现时,标题显示“为(数组中的最后一个元素)输入值”
我的目标是:
对于数组中的每个元素,我希望屏幕上出现一个弹出窗口来更改它的值。加载下一个元素的另一个弹出窗口,依此类推。到目前为止,prompt工作正常,但看起来不太好
以下是模式的代码:
<div class="modal fade" id="wordModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Edit Value</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
</div>
<div class="modal-body">
<div class="form-group">
<label>Comment</label>
<textarea type="text" class="form-control" name="comment" id="elm2" placeholder=""></textarea>
</div>
</div>
<div class="modal-footer">
<button type="button" id="submit" class="btn btn-primary">Add</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
编辑值
&时代;
评论
添加
接近
除了这可能不是最好的UX之外,使用modals实现这一点的方法是使用async
/wait
:
函数showmodel(word){
返回新承诺(解决=>{
$('.modal title').html(“编辑“+word”的值);
$('#wordModal').modal('show').on('hidden.bs.modal',function(){
让输入=$('#elm2').val();
解析(输入);
});
});
}
异步函数promptalwords(words){
对于(var i=0;代码的行为与它应该的完全一样。您正在循环并使同一个模型可见,以便它为每个单词更新一个模型,因此您只看到最后一个单词。您需要显示等待输入的模式,然后在捕获第一个单词后显示第二个单词的模式。模式与javascript提示符或警报。提示和警报会在用户单击按钮之前停止javascript的执行。模式只是html。它不会停止javascript。如果你想要相同的行为,你必须采取不同的方法。像函数而不是循环。但是为什么你希望它一个接一个地运行?我的意思是代码不会等待单击单击
method只会附加带有回调函数的侦听器。然后处理下一个对象。你应该让它更像是在回调中更改项时的链表。我不知道modals没有停止javascript。有人有其他替代方法的示例吗?没有更多上下文。注释没有足够的空间给你u任何示例。除非答案回答了您的问题,否则无法使用答案。随机示例不是您问题的答案。您必须编辑您的问题,添加您试图执行的操作的解释(我指的是脚本为用户所做的操作,而不是问题本身)并添加相关的HTML代码,这样我们就可以给你一个实际解决问题的答案。谢谢,我应该把它放在for each中吗?不,你需要完全摆脱这些,按照我在promptAllWords
方法中的例子,使用一个标准的for
循环。谢谢!我意识到这不是最常用的方法是的,但它可以让我暂时通过。我试图让函数promptAllWords返回一个变量。但它返回一个承诺?我如何从中获得变量?@CíanMacTiarná在哪个变量中,你希望它返回?