1

我对带有 Ubuntu 的最新 Mozilla Browser 13.0 有一个奇怪的问题。该代码在其他浏览器和以前版本的 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').... is undefined

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

4

3 回答 3

0

嗯...为我工作?

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

于 2012-06-12T14:54:35.650 回答
0

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

添加缺课检查;if (typeof target.attr('class') === "undefined") return;

于 2012-06-12T15:10:00.840 回答
0

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

“从 jQuery 1.6 开始,.attr() 方法为尚未设置的属性返回 undefined。” API 参考。

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

$(document).click(function(event) {
    var target = $(event.target);

    if (!target.hasClass('RefineClick') && target.parents('.RefineClick').length == 0) {
        $('.RefineClick').fadeOut();
    }
});

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

于 2012-07-16T08:48:40.553 回答