javascript JS未按顺序执行:最后一个命令在第一个命令完全解析之前激发

0sgqnhkj  于 2023-01-11  发布在  Java
关注(0)|答案(1)|浏览(129)

我有一个脚本,它将“重命名”并重新启用我故意破坏的某个DOM元素

<button id="mypxlbtn" onclick="myPXFDFunction()">Pixelfed</button>
<script>
  function myPXFDFunction() {
    document.body.innerHTML = document.body.innerHTML.replace('pixlframe', 'iframe');
    document.getElementById('mypxlbtn').style.visibility = 'hidden';
  }
</script>
<pixlframe src="https://pixelfed.de/aoikurayami/embed" width="80%" height="800" scrolling="yes" frameborder="0"></pixlframe>

然而,“隐藏按钮”JavaScript动作在重命名操作之前或至少在重命名操作中间触发。据我所知,这应该是两个异步命令。
那么,为什么这根本无法实现预期的效果呢?
预期“按顺序执行”的已执行js,但第二个函数比预期提前触发

u2nhd7ah

u2nhd7ah1#

设置innerHTML将导致整个正文被重建。您在JavaScript中添加到元素的任何事件侦听器都将丢失。
在任何情况下,解决方案都是仅通过操作元素(而不是更改html)进行更改,或者为要应用的样式添加超时

<script>
  function myPXFDFunction() {
    document.body.innerHTML = document.body.innerHTML.replace('pixlframe', 'iframe');
    setTimeout(function() {
      document.getElementById('mypxlbtn').style.visibility = 'hidden';
    }, 4);
  }
</script>

相关问题