ReferenceError:Firefox中未定义事件错误


104

我已经为客户创建了一个页面,最初是在Chrome中工作,却忘记了检查它是否在Firefox中工作。现在,我遇到了一个大问题,因为整个页面基于无法在Firefox中运行的脚本。

它基于所有具有rel导致隐藏和显示正确页面的“链接” 。我不明白为什么这在Firefox中不起作用。

例如,页面具有id #menuPage#aboutPage依此类推。所有链接都有以下代码:

<a class="menuOption" rel='#homePage' href="#">Velkommen</a> 

它可以在Chrome和Safari中完美运行。

这是代码:

$(document).ready(function(){

//Main Navigation


$('.menuOption').click(function(){

  event.preventDefault();
  var categories = $(this).attr('rel');
  $('.pages').hide();
  $(categories).fadeIn();


});

// HIDES and showes the right starting menu
    $('.all').hide();
    $('.pizza').show();


// Hides and shows using rel tags in the buttons    
    $('.menyCat').click(function(event){
        event.preventDefault();
        var categori = $(this).attr('rel');
        $('.all').hide();
        $(categori).fadeIn();
        $('html,body').scrollTo(0, categori);

    });


}); 

2
如果您在说“不起作用”时准确解释您的意思,那将非常有帮助。什么没有发生?错误吗?布局不好?不良行为?
Pointy 2013年

Answers:


136

您错误地声明了(某些)事件处理程序:

$('.menuOption').click(function( event ){ // <---- "event" parameter here

    event.preventDefault();
    var categories = $(this).attr('rel');
    $('.pages').hide();
    $(categories).fadeIn();


});

您需要“事件”作为处理程序的参数。WebKit遵循IE的旧行为,即对“事件”使用全局符号,但Firefox并非如此。当您使用jQuery时,该库将对行为进行规范化并确保为事件处理程序传递了event参数。

编辑 -澄清:您必须提供一些参数名称;使用event可以清楚地说明您的意图,但是您可以调用它ecupcake其他方法。

还请注意,您可能应该使用从jQuery传入的参数而不是“本机”参数(在Chrome,IE和Safari中)的原因是,该参数(参数)是围绕本机事件对象的jQuery包装器。包装器可以正常化浏览器之间的事件行为。如果使用全局版本,则不会。


十分感谢。meteor.js使用了大量的事件变量。在没有通过事件的情况下,function(){....仍然适用于chrome和safari。但是Firefox会失败。
Jimmy MG Lim

54

这是因为你忘了传递eventclick函数:

$('.menuOption').on('click', function (e) { // <-- the "e" for event

    e.preventDefault(); // now it'll work

    var categories = $(this).attr('rel');
    $('.pages').hide();
    $(categories).fadeIn();
});

在一个侧面说明,e是比较常用的,而不是这个词event,因为Event在大多数浏览器中的全局变量。


3
...当然除了Firefox!使用名称“ event”作为参数不会有什么坏处,因为它不是保留字或其他任何内容。
Pointy 2013年

1
非常正确,我想我刚从ejQuery 接过!@Pointy
Mark Pieszak-Trilon.io 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.