問題がvar func = function() { ...
を宣言すると、スコープの上部にvar func;
一部をホイスト、それラインに到達するまでfunc
をfunction() { ...
として定義されていないことです。あなたはイベントハンドラを添付するときに、これは何が起こっているのか、本質的である:
var closeSave = document.getElementById("closeSave");
var closeWindow;
var closeWindowByEsc;
// here, closeWindow and closeWindowByEsc are `undefined`
closeSave.addEventListener("click", closeWindow);
closeSave.addEventListener("keypress", closeWindowByEsc);
// When the user clicks on <span> (x), close the modal
closeWindow = function() {
saveModal.style.display = "none";
loadModal.style.display = "none";
}
closeWindowByEsc = function(e) {
if (!e) e = window.event;
var keyCode = e.keyCode || e.which;
if (keyCode == '27') {
closeWindow();
}
}
あなたはこれを解決するために2つのことを行うことができます。
addEventListener()
のインスタンス化の下に移動します。
var closeSave = document.getElementById("closeSave");
// When the user clicks on <span> (x), close the modal
var closeWindow = function() {
saveModal.style.display = "none";
loadModal.style.display = "none";
}
var closeWindowByEsc = function(e) {
if (!e) e = window.event;
var keyCode = e.keyCode || e.which;
if (keyCode == '27') {
closeWindow();
}
}
closeSave.addEventListener("click", closeWindow);
closeSave.addEventListener("keypress", closeWindowByEsc);
しますか、関数式ではなく、スコープの先頭にインスタンス化を呼び出すfunction文を使用できます。
var closeSave = document.getElementById("closeSave");
closeSave.addEventListener("click", closeWindow);
closeSave.addEventListener("keypress", closeWindowByEsc);
// When the user clicks on <span> (x), close the modal
function closeWindow() {
saveModal.style.display = "none";
loadModal.style.display = "none";
}
function closeWindowByEsc(e) {
if (!e) e = window.event;
var keyCode = e.keyCode || e.which;
if (keyCode == '27') {
closeWindow();
}
}
関数に渡すことは、関数がそれを使用していない場合は何もしません。 – JBC
彼は 'closeSave'' 'keypress' 'イベントハンドラを指しています。' closeWindow() '関数ではありません。 –
関数はそれを使用しています – Sid24