如何使用 ESC 键关闭模式/对话框?
How to Close a Modal / Dialog Box Using the ESC Key?
您好,我在我的网站上使用这些模式/对话框。如果我没记错的话,我使用的是 W3-Schools 的代码 jQuery。它们工作正常,我可以通过在框外单击来关闭它们,但我无法使用 ESC 键关闭它们。我有它们的页面有 6 个作为难度的附加元素。任何帮助将不胜感激。
这是对话框和打开按钮的代码
// Get the modal
var modal1 = document.getElementById('service1');
window.onclick = function(event) {
if (event.target == modal1) {
modal1.style.display = "none";
}
}
// These are the new code for using the ESC key (keycode = 27), but I have not had any luck
$("window").keydown(function(event) {
if (event.which == 27 & event.target == modal1) {
modal1.style.display = "none";
}
})
window.keydown = function(event) {
if (event.which == 27 & event.target == modal1) {
modal1.style.display = "none";
}
}
#service1 { display:none }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="button" onclick="document.getElementById('service1').style.display='block'"> Some Text
</button>
<div id="service1" class="w3-modal w3-margin-top">
<div class="w3-modal-content w3-card-4 w3-animate-top" style=" top:50px; width:61%; height:auto">
<header class="w3-container" style="height:auto;
background-color:#FE0565 ; color:#fff ;">
<span onclick="document.getElementById('service1').style.display='none'">
<i class="fa fa-close"></i></span>
<h2 style="text-align: center; font-size:34px; position:
relative;width:54%;margin-left:20%; top:0px;
text-decoration: underline"><b>Hard Drive</b></h2>
</header>
<div style="height:200px;">
<p></p>
</div>
<footer class="container" style="background-color:
#FE0565; color:#fff;">
<a href="/#">
<h3>For More Info Click Here</h3>
</a>
<span onclick="document.getElementById('service1').style.display='none'">
<i class="fa fa-close"></i></span>
</footer>
</div>
</div>
试试这个:
$(document).on("click", ".w3-modal",function(event) {
$(this).hide(); // hide when clicked
});
// if you want to hide when clicked outside try something like this
/*
$(document).on("click",function(event) {
var $tgt = $(event.target);
if (!$tgt.is(".w3-modal") && !$tgt.is(".modalbut")) $(".w3-modal").hide(); // hide when clicked outside
});
*/
// These are the new code for using the ESC key (keycode = 27), but I have not had any luck
$(document).keydown(function(e) {
var code = e.keyCode || e.which;
if (code == 27) $(".w3-modal").hide();
});
#service1 {
display: none
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="modalbut button" onclick="document.getElementById('service1').style.display='block'"> Some Text
</button>
<div id="service1" class="w3-modal w3-margin-top">
<div class="w3-modal-content w3-card-4 w3-animate-top" style=" top:50px; width:61%; height:auto">
<header class="w3-container" style="height:auto;
background-color:#FE0565 ; color:#fff ;">
<span onclick="document.getElementById('service1').style.display='none'">
<i class="fa fa-close"></i></span>
<h2 style="text-align: center; font-size:34px; position:
relative;width:54%;margin-left:20%; top:0px;
text-decoration: underline"><b>Hard Drive</b></h2>
</header>
<div style="height:200px;">
<p></p>
</div>
<footer class="container" style="background-color:
#FE0565; color:#fff;">
<a href="/#">
<h3>For More Info Click Here</h3>
</a>
<span onclick="document.getElementById('service1').style.display='none'">
<i class="fa fa-close"></i></span>
</footer>
</div>
</div>
如果您有多个模式,您可以使用下面的脚本。我不得不在一页中打开这么多模态,这就是我写这个脚本的原因。该脚本根据使用转义键的打开顺序一个一个地关闭模式。而且你不需要在脚本中定义任何模态名称,因此一次添加就可以在任何地方使用。
var modals=[]; // array to store modal id
$(document).ready(function(){
$('.modal').modal({show: false, keyboard: false}); // disable keyboard because it conflicts below
$('.modal').on('show.bs.modal', function (event) {
//add modal id to array
modals.push(event.target.id);
});
document.onkeydown = function(evt) {
evt = evt || window.event;
var isEscape = false;
if ("key" in evt) {
isEscape = (evt.key === "Escape" || evt.key === "Esc");
} else {
isEscape = (evt.keyCode === 27);
}
if (isEscape) {
if(modals.length>0){
//get last modal id by using pop().
//This function also removes last item in array.
var id = modals.pop();
if($('#'+id).is(':visible')){ // if modal is not closed by click or close button
$('#'+id).modal('toggle');
}
}else{
alert("Could not find any modals!");
}
}
};
});
您好,我在我的网站上使用这些模式/对话框。如果我没记错的话,我使用的是 W3-Schools 的代码 jQuery。它们工作正常,我可以通过在框外单击来关闭它们,但我无法使用 ESC 键关闭它们。我有它们的页面有 6 个作为难度的附加元素。任何帮助将不胜感激。
这是对话框和打开按钮的代码
// Get the modal
var modal1 = document.getElementById('service1');
window.onclick = function(event) {
if (event.target == modal1) {
modal1.style.display = "none";
}
}
// These are the new code for using the ESC key (keycode = 27), but I have not had any luck
$("window").keydown(function(event) {
if (event.which == 27 & event.target == modal1) {
modal1.style.display = "none";
}
})
window.keydown = function(event) {
if (event.which == 27 & event.target == modal1) {
modal1.style.display = "none";
}
}
#service1 { display:none }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="button" onclick="document.getElementById('service1').style.display='block'"> Some Text
</button>
<div id="service1" class="w3-modal w3-margin-top">
<div class="w3-modal-content w3-card-4 w3-animate-top" style=" top:50px; width:61%; height:auto">
<header class="w3-container" style="height:auto;
background-color:#FE0565 ; color:#fff ;">
<span onclick="document.getElementById('service1').style.display='none'">
<i class="fa fa-close"></i></span>
<h2 style="text-align: center; font-size:34px; position:
relative;width:54%;margin-left:20%; top:0px;
text-decoration: underline"><b>Hard Drive</b></h2>
</header>
<div style="height:200px;">
<p></p>
</div>
<footer class="container" style="background-color:
#FE0565; color:#fff;">
<a href="/#">
<h3>For More Info Click Here</h3>
</a>
<span onclick="document.getElementById('service1').style.display='none'">
<i class="fa fa-close"></i></span>
</footer>
</div>
</div>
试试这个:
$(document).on("click", ".w3-modal",function(event) {
$(this).hide(); // hide when clicked
});
// if you want to hide when clicked outside try something like this
/*
$(document).on("click",function(event) {
var $tgt = $(event.target);
if (!$tgt.is(".w3-modal") && !$tgt.is(".modalbut")) $(".w3-modal").hide(); // hide when clicked outside
});
*/
// These are the new code for using the ESC key (keycode = 27), but I have not had any luck
$(document).keydown(function(e) {
var code = e.keyCode || e.which;
if (code == 27) $(".w3-modal").hide();
});
#service1 {
display: none
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="modalbut button" onclick="document.getElementById('service1').style.display='block'"> Some Text
</button>
<div id="service1" class="w3-modal w3-margin-top">
<div class="w3-modal-content w3-card-4 w3-animate-top" style=" top:50px; width:61%; height:auto">
<header class="w3-container" style="height:auto;
background-color:#FE0565 ; color:#fff ;">
<span onclick="document.getElementById('service1').style.display='none'">
<i class="fa fa-close"></i></span>
<h2 style="text-align: center; font-size:34px; position:
relative;width:54%;margin-left:20%; top:0px;
text-decoration: underline"><b>Hard Drive</b></h2>
</header>
<div style="height:200px;">
<p></p>
</div>
<footer class="container" style="background-color:
#FE0565; color:#fff;">
<a href="/#">
<h3>For More Info Click Here</h3>
</a>
<span onclick="document.getElementById('service1').style.display='none'">
<i class="fa fa-close"></i></span>
</footer>
</div>
</div>
如果您有多个模式,您可以使用下面的脚本。我不得不在一页中打开这么多模态,这就是我写这个脚本的原因。该脚本根据使用转义键的打开顺序一个一个地关闭模式。而且你不需要在脚本中定义任何模态名称,因此一次添加就可以在任何地方使用。
var modals=[]; // array to store modal id
$(document).ready(function(){
$('.modal').modal({show: false, keyboard: false}); // disable keyboard because it conflicts below
$('.modal').on('show.bs.modal', function (event) {
//add modal id to array
modals.push(event.target.id);
});
document.onkeydown = function(evt) {
evt = evt || window.event;
var isEscape = false;
if ("key" in evt) {
isEscape = (evt.key === "Escape" || evt.key === "Esc");
} else {
isEscape = (evt.keyCode === 27);
}
if (isEscape) {
if(modals.length>0){
//get last modal id by using pop().
//This function also removes last item in array.
var id = modals.pop();
if($('#'+id).is(':visible')){ // if modal is not closed by click or close button
$('#'+id).modal('toggle');
}
}else{
alert("Could not find any modals!");
}
}
};
});