我试图在if语句为true后显示一个模态,在我的示例中,我在用户按Enter后这样做,在我的真实的代码中,有一些其他if语句嵌套在其中。
我编写了this codepen来说明这个问题,为了清楚起见,我也将代码放在这里。
这是我的HTML,非常基本,创建对话框,不提供“open”属性,所以默认情况下它是隐藏的:
Press Enter
<dialog id="greeting">
<p>Greetings, one and all!<p>
<form method="dialog">
<button>×</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
,这让我觉得我显然错过了一些东西,因为模态仍然不可见。
感谢所有能帮忙的人。
1条答案
按热度按时间3zwtqj6y1#
您需要防止执行本机事件。添加
e.preventDefault();
,一切都应该正常工作。