Javascript window.openポップアップがあり、ユーザーがEscキーを押したときにポップアップが閉じられるようにします。 ESCキーをキャッチできるように、キーダウンイベント(およびどのオブジェクト)をフックするかがわかりません。
JQueryを使用しています。
次のようなものを試してください:
$(document).keydown(function(e) {
// ESCAPE key pressed
if (e.keyCode == 27) {
window.close();
}
});
JQueryを使用せずにJSで達成することが可能です。
window.onkeydown = function( event ) {
if ( event.keyCode == 27 ) {
console.log( 'escape pressed' );
}
};
これ以上の任意の番号コードはありません!
document.addEventListener('keydown', function(event) {
const key = event.key; // const {key} = event; in ES6+
if (key === "Escape") {
window.close();
}
});
ポップアップウィンドウで関数 @ Gumbo posted を使用する必要があることを忘れないでください。したがって、ポップアップにJQueryを含めて、ポップアップを開くウィンドウではなくそこで関数を実行する必要があります。
@Gumboの答えは良いですが、多くの場合、この動作を解除する必要があるため、one
イベントハンドラを使用することをお勧めします。
$(document).one('keydown', function(e) {
// ESCAPE key pressed
if (e.keyCode == 27) {
window.close();
}
});
OR
$(document).on('keydown', function(e) {
// ESCAPE key pressed
if (e.keyCode == 27) {
window.close();
}
});
行動を止める準備ができたら
$(document).off('keydown');
Jqueryを使用してbind key events を簡単に実現できます。
ここでは .keydown()
を使用できます
$(document).keydown(function(e) {
if (e.keyCode == 27) {
window.close();
}
});
ここでangularjsポップアップソリューションを探している場合は
*これはui-bootstrap依存関係を使用しない(他に方法がない場合のみ推奨)
$scope.openModal = function(index){
$scope.showpopup = true;
event.stopPropagation();//cool part
};
$scope.closeModal = function(){
$scope.cc.modal.showpopup = false;
};
window.onclick = function() {
if ($scope.showpopup) {
$scope.showpopup = false;
// You should let angular know about the update that you have made, so that it can refresh the UI
$scope.$apply();
}
};
//escape key functionality playing with scope variable
document.onkeydown = function (event) {
const key = event.key; // const {key} = event; in ES6+
if (key === "Escape") {
if ($scope.showpopup) {
$scope.showpopup = false;
// You should let angular know about the update that you have made, so that it can refresh the UI
$scope.$apply();
}
}
};
参照:上記の回答と http://blog.nkn.io/post/hiding-menu-when-clicking-outside---angularjs/