【问题标题】:how to console.log before prompt [duplicate]如何在提示之前控制台.log [重复]
【发布时间】:2026-01-16 21:45:01
【问题描述】:

如何避免这种愚蠢的行为 - prompt dialog 阻止了我需要决定在对话框中输入什么的代码。

在本例中是 console.log。如何在编写控制台之后获取prompt 对话框。

$('.selx').on('change', function(){
  let a = $(this).val();
  console.log(a);
  let b = prompt('NEW TITLE');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select class='selx'>
<option value='323'>lorem</option>
<option value='525'>ipsum</option>
</select>

【问题讨论】:

  • prompt 阻塞 - 在prompt 阻止进一步发生之前,堆栈 sn-p 控制台没有时间重新渲染。将prompt 放入setTimeout

标签: javascript jquery prompt


【解决方案1】:

控制台是异步的(总会有一点延迟,通常你不会注意到)。调用 prompt 将停止选项卡上正在进行的所有其他操作,包括控制台。因此,您必须添加一个小延迟,以使浏览器在提示之前更新控制台:

 $('.selx').on('change', function(){
   let a = $(this).val();
   console.log(a);
   setTimeout(() => {
      let b = prompt('NEW TITLE');
   }, 10);
 });

【讨论】:

  • 如果我的代码不仅仅是console.log 而是一个繁重的函数怎么办?我如何确定超时 10 或任何 - 就足够了?
  • @puerto 你说的“重”是什么意思?当到达setTimeout 的行时将开始超时,这意味着之前的所有行都已执行。
  • 哦,如果是这样 - 没关系。非常感谢。假设 - 解决了。
  • @puerto 很高兴为您提供帮助 :)
  • @JonasWilms 为什么需要10 超时? 0 不也能正常工作吗?