ReferenceError:Firefox 中的事件未定义错误

IT技术 javascript jquery html firefox
2021-02-01 08:20:32

我为客户制作了一个页面,我最初在 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个回答

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

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

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


});

您需要“事件”作为处理程序的参数。WebKit 遵循 IE 对“事件”使用全局符号的旧行为,但 Firefox 没有。当您使用 jQuery 时,该库会规范行为并确保您的事件处理程序传递事件参数。

编辑- 澄清:您必须提供一些参数名称;usingevent清楚地表明您的意图,但您可以调用它ecupcake其他任何东西。

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

万分谢意。meteor.js 使用了大量的事件变量。function(){.... 不传递事件在 chrome 和 safari 中仍然有效。但是firefox会失败。
2021-03-28 08:20:32

这是因为你忘了传递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是大多数浏览器中的全局变量。

非常正确,我想我刚刚e从 jQuery 中学到了!@尖尖的
2021-04-04 08:20:32
...当然,Firefox 除外!为参数使用名称“事件”并没有什么坏处,因为它不是保留字或任何东西。
2021-04-11 08:20:32