火狐错误:尽管将"event"作为函数参数传递,但仍"Event is not defined"



让我们假设我想要一个自定义功能来处理页面过渡。页面上的链接和div元素都有"单击"的事件侦听器。显然,在链接的情况下,我想防止默认链接操作,以便我的功能可以在过渡效果完成后接管页面。

下面的JSFIDDLE是一个简化的示例。它在Chrome,即Opera中起作用,但Firefox会引发参考:事件未定义

https://jsfiddle.net/hty7tsty/9/

html

<div id="div">Div</div>
<a id="link" href="#">Link</a>
<div id="result" style="display:none">Clicked</div>

JS

$('#div, #link').click(myfunc(event));
function myfunc(event){
    return function(){
    if(event) { event.preventDefault(); }
    $('#result').show();
  }
}

例如,我有一些方法可以避免问题,例如,不使用<a>元素,但我想了解为什么Firefox的行为不同。

使用此代码,FirxFox期望将事件作为Parmater传递给该函数,但在您的代码中,返回的函数来自调用 myFun()没有称为事件的参数,因此它将返回未定义的使用此示例

$('#div, #link').click(myfunc());
function myfunc(){
	return function(event){
    if(event) { event.preventDefault(); }
    $('#result').show();
  }
  
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="div">Div</div>
<a id="link" href="#">Link</a>
<div id="result" style="display:none">Clicked</div>

传递您的功能,但不要调用它。

function myfunc(event){
    if(event) { event.preventDefault(); }
    $('#result').show();
}
$('#div, #link').click(myfunc);

相关内容

最新更新