Target.attr('class') 在 Mozilla 中是未定义的

Target.attr('class') is undefined in mozilla

本文关键字:未定义 Mozilla class attr Target      更新时间:2023-09-26

我对最新的 Mozilla Browser 13.0 和 Ubuntu 有一个奇怪的问题。该代码在其他浏览器和以前版本的 Mozilla 中完美运行。

这是代码

$(document).click(function(event) {
  var target = $(event.target);
  if (!target.attr('class').match(/^RefineClick/) && target.parents('.RefineClick').length == 0) {
   jQuery('.RefineClick').fadeOut();
  }
});

并且我收到以下错误:Target.attr('class')....未定义

这是截图: http://i47.tinypic.com/dqoits.png

嗯...为我工作?

http://jsfiddle.net/acrashik/b9MCj/

如果没有类

附加到单击的元素target.attr('class')返回undefined(从 v1.6 开始); 在 FF 中,这表示为您尝试调用 .match 时看到的错误。(在 chrome 中,它将是"无法调用未定义的方法匹配")

为缺席的类添加检查; if (typeof target.attr('class') === "undefined") return;

您将该函数绑定到整个文档上的"单击"事件。因此,任何单击都将触发处理程序,包括未设置类属性的元素上的处理程序。虽然如果您仅在具有定义的"class"属性的元素上对其进行测试(在任何浏览器中),这将正常工作,但它会抛出错误(在任何浏览器中),因为您尝试在undefined值上调用方法.match()

"从jQuery 1.6开始,.attr()方法为尚未设置的属性返回未定义。接口参考

既然你正在使用jQuery,谁不使用它的全部功能?它有一个内置的.hasClass()方法:

$(document).click(function(event) {
    var target = $(event.target);
    if (!target.hasClass('RefineClick') && target.parents('.RefineClick').length == 0) {
        $('.RefineClick').fadeOut();
    }
});

请注意,该方法的输入是类名,而不是类选择器。