Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firefox错误:";“未定义事件”;尽管通过了",;事件“;作为函数参数_Javascript_Jquery - Fatal编程技术网

Javascript Firefox错误:";“未定义事件”;尽管通过了",;事件“;作为函数参数

Javascript Firefox错误:";“未定义事件”;尽管通过了",;事件“;作为函数参数,javascript,jquery,Javascript,Jquery,假设我需要一个自定义函数来处理页面转换。页面上的链接和div元素上都有用于“单击”的事件侦听器。显然,在链接的情况下,我希望阻止默认的链接操作,以便我的函数可以在转换效果完成后接管重定向页面 下面的jsfiddle是一个简化的示例。它在Chrome,IE,Opera中工作,但是Firefox抛出一个ReferenceError:事件未定义 HTML 我有一些方法可以避免这个问题,例如,不使用元素,但我想了解为什么Firefox的行为不同。传递函数,但不要调用它 function myfunc(

假设我需要一个自定义函数来处理页面转换。页面上的链接和div元素上都有用于“单击”的事件侦听器。显然,在链接的情况下,我希望阻止默认的链接操作,以便我的函数可以在转换效果完成后接管重定向页面

下面的jsfiddle是一个简化的示例。它在Chrome,IE,Opera中工作,但是Firefox抛出一个ReferenceError:事件未定义

HTML


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

传递函数,但不要调用它

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

$('#div, #link').click(myfunc);

传递函数,但不要调用它

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

$('#div, #link').click(myfunc);

改用此代码,firxfox需要一个将事件作为parmater传递给它的函数,但在您的代码中,返回的函数是调用myfun() 没有名为event的参数,因此它将返回undefined。请使用此示例

$('#div,#link')。单击(myfunc());
函数myfunc(){
返回函数(事件){
if(event){event.preventDefault();}
$(“#结果”).show();
}
}

Div

单击
改用此代码,firxfox希望函数将事件作为parmater传递给它,但在您的代码中,调用myfun()返回的函数 没有名为event的参数,因此它将返回undefined。请使用此示例

$('#div,#link')。单击(myfunc());
函数myfunc(){
返回函数(事件){
if(event){event.preventDefault();}
$(“#结果”).show();
}
}

Div

点击
阅读关于这个特定Firefox错误的其他Stackoverflow问题,我的印象是Firefox希望“事件”作为“参数传递给处理程序”(编辑)。编辑:事实上,一旦我将您的更改合并到一起,JSFIDLE就可以工作了,我只是不确定为什么在这种情况下不需要将“事件”传递给处理程序。哦,我想我看到了我的案例和我以前读过的案例之间的区别。这是因为我没有使用匿名函数,所以我可以在定义函数时给它一个“event”参数,然后在不调用它的情况下将函数传递给偶数处理程序,就像Jonathan Dion的回答一样。我会选择您的答案,因为您的解释帮助我了解了我的错误所在。通过阅读有关此特定Firefox错误的其他Stackoverflow问题,我的印象是Firefox希望“事件”作为“参数传递给处理程序”(编辑)。编辑:事实上,一旦我将您的更改合并到一起,JSFIDLE就可以工作了,我只是不确定为什么在这种情况下不需要将“事件”传递给处理程序。哦,我想我看到了我的案例和我以前读过的案例之间的区别。这是因为我没有使用匿名函数,所以我可以在定义函数时给它一个“event”参数,然后在不调用它的情况下将函数传递给偶数处理程序,就像Jonathan Dion的回答一样。我会选择你的答案,因为你的解释帮助我看出了我错在哪里。你的代码解决了问题。我选择了另一个答案,因为它帮助我理解我在哪里犯了错误。我认为将函数传递给偶数处理程序时需要“事件”。但是如果我理解正确的话,Firefox在定义函数时实际上需要它。谢谢你的代码解决了这个问题。我选择了另一个答案,因为它帮助我理解我在哪里犯了错误。我认为将函数传递给偶数处理程序时需要“事件”。但是如果我理解正确的话,Firefox在定义函数时实际上需要它。谢谢
function myfunc(event){
    if(event) { event.preventDefault(); }
    $('#result').show();
}

$('#div, #link').click(myfunc);