モーダル ボックスのポップアップ機能を作成しました。すべてのブラウザで、誰かがエスケープ キーを押したときに、このモーダル ポップアップ ボックスを閉じたいと思います。modal-window.min.js
これらのポップアップにファイルを使用しました。
このキーに応答してこれらを閉じるにはどうすればよいですか?
$(document).keypress(function(e) {
if (e.keyCode === 27) {
$("#popdiv").fadeOut(500);
//or
window.close();
}
});
jQuery以外のソリューションを探してこれにたどり着いた人は、次のとおりです。
document.addEventListener('keydown', (event) => {
if (event.key === 'Escape') {
// close modal here
}
})
複数のモーダルがある場合は、以下のスクリプトを使用できます。1 つのページで非常に多くのモーダルを開く必要があったため、このスクリプトを作成しました。このスクリプトは、モーダルをエスケープキーで開いた順に一つずつ閉じます。また、スクリプトでモーダル名を定義する必要がないため、一度追加するとどこでも使用できます。
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!");
}
}
};
});
<script type="text/javascript">
jQuery(document).keypress(function(e) {
if (e.keyCode === 27) {
jQuery("#myModal").modal('toggle');
OR
jQuery("#myModal").modal('hide');
}
});
</script>
出典: http://chandreshrana.blogspot.in/2016/05/how-to-close-model-popup-on-escape-key.html
AngularJs の使用: 複数のモーダルがある場合、
各モーダルに値を割り当てます。モーダルを開くときは true に設定し、閉じるときは false に設定します。
//in your .js script
document.onkeydown = function (event) {
event = event || window.event;
if (event.keyCode === 27) {
if (usersModal)
$scope.hideUsersModal();
else if (groupsModal)
$scope.hideGroupsModal();
}
Angular を使用すると、event.target
プロパティは ng-controller を設定した場所を示しevent.currentTarget
、#document
.