Javascript 事件不是';t仅在FireFox中定义-在Chrome和Safari中定义
我在FireFox的函数中遇到了一个问题,它说Javascript 事件不是';t仅在FireFox中定义-在Chrome和Safari中定义,javascript,firefox,Javascript,Firefox,我在FireFox的函数中遇到了一个问题,它说event未定义。然而,该代码在Chrome和Safari中运行得非常好。修复前的相关代码如下所示: function searchOpen(event) { event.preventDefault(); searchOverlay.classList.add("show"); searchOverlayInput.focus(); } function searchClose() { if (event.target.class
event
未定义。然而,该代码在Chrome和Safari中运行得非常好。修复前的相关代码如下所示:
function searchOpen(event) {
event.preventDefault();
searchOverlay.classList.add("show");
searchOverlayInput.focus();
}
function searchClose() {
if (event.target.classList.contains("search-overlay__search-bar", "search-suggestion-item", "search-suggestion-item__link")) {
return false;
} else {
searchOverlay.classList.remove("show");
}
}
for (var i = 0; i < navSearch.length; i++) {
navSearch[i].addEventListener("click", searchOpen);
}
searchCloseButton.addEventListener("click", searchClose);
这就解决了问题
但我不明白的是,
event
在该函数中从未被引用,我只将其传递到searchOpen()
——但为什么只有在FireFox中它才会抛出引用错误?为什么旧代码在Chrome和Safari上起作用?因为没有定义事件嗯…我的问题是如果没有定义事件,Chrome和Safari怎么会没有发现这个错误?而且在searchClose()
函数中没有对事件的引用,只有searchOpen()
-那么为什么searchClose()
在函数中的任何地方都没有引用时返回未定义的事件呢?懒得去查找它,但是搜索窗口。事件一些浏览器支持它,其他浏览器不支持。你确定它从未被引用过吗?这个if(event.target.classList.contains
函数中的searchClose
看起来确实像是被引用的。你做过epascarello提到的研究吗?window
是全局对象,一些浏览器上有window.event
。因此对于有事件的浏览器,event
被定义为“globaly”而且他们不会抛出错误。Firefox显然不是这些浏览器之一。
function searchClose(event) {
if (event.target.classList.contains("search-overlay__search-bar", "search-suggestion-item", "search-suggestion-item__link")) {
return false;
} else {
searchOverlay.classList.remove("show");
}
}