JavaScript中的showModal()在函数的if语句中不工作

flseospp  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(97)

我试图在if语句为true后显示一个模态,在我的示例中,我在用户按Enter后这样做,在我的真实的代码中,有一些其他if语句嵌套在其中。
我编写了this codepen来说明这个问题,为了清楚起见,我也将代码放在这里。
这是我的HTML,非常基本,创建对话框,不提供“open”属性,所以默认情况下它是隐藏的:

Press Enter
<dialog id="greeting">
  <p>Greetings, one and all!<p>
  <form method="dialog">
    <button>&times;</button>
  </form>
</dialog>

然后我们有JavaScript,我获取模态并将其存储在全局变量中,创建一个函数监听按键,另一个函数解析它们。在解析函数中,我添加了代码,以便(未成功地)仅当按下的键是“ENTER”时才显示模型。

let greeting = document.getElementById("greeting");
window.addEventListener("keydown", function (e) {
    parseKey(e.key);
});

function parseKey(pressedKey) {
    pressedKey = pressedKey.toUpperCase()
    if (pressedKey== "ENTER") {
      console.log(greeting);
      greeting.showModal();
      console.log(greeting.getAttribute("open"));
      
      
      //greeting.setAttribute("open", "open");
      
      //alternative = document.getElementById("greeting");
      //console.log(alternative);
      //alternative.showModal();
    }
}

如你所见,我也:
1.使用console.log()作为一种调试工具,以确保if语句正常工作,并且在函数中可以使用模态。这似乎可以工作,所以当我按Enter键时,控制台显示模态的HTML代码
1.记录模态的“open”属性的值,得到一个空字符串作为响应
在我的评论部分,我也试过:
1.手动设置属性的步骤
1.直接在函数中获取模态,再次获得与函数将模态的HTML记录到控制台相同的结果,但模态保持隐藏
当我尝试将两个showModal()一个接一个地放置时,我得到了InvalidStateError: HTMLDialogElement.showModal: Dialog element already has an 'open' attribute,这让我觉得我显然错过了一些东西,因为模态仍然不可见。
感谢所有能帮忙的人。

3zwtqj6y

3zwtqj6y1#

您需要防止执行本机事件。添加e.preventDefault();,一切都应该正常工作。

相关问题