【问题标题】:Target.attr('class') is undefined in mozillaTarget.attr('class') 在 mozilla 中未定义
【发布时间】:2012-06-15 11:25:53
【问题描述】:

我在使用 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').... 未定义

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

【问题讨论】:

  • 你为什么选择这种方式而不是使用 jQuery 的选择器?
  • hasClass 方法代替正则表达式的精彩代码怎么样?
  • 试试var target = $(event.target || e.srcElement);。 @VisioN 我认为hasClass 在涉及多个类时不准确,如果我错了,请纠正我。
  • @jSang 你错了。它应该可以正常工作。
  • 除了 .hasClass 不会匹配 RefineClick1,例如他的匹配方法。

标签: javascript jquery html firefox cross-browser


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • if (target.attr('class')) 也不会通过...而且看起来更好:)
    【解决方案3】:

    嗯...为我工作?

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

    【讨论】:

    • 你能用我的代码锻炼吗?我需要的是当弹出窗口出现并且用户单击文档中的任何位置时,弹出窗口应该淡出。
    • 看不到处理父母类的原始代码 :) 不太清楚你想隐藏什么以及何时隐藏东西
    猜你喜欢
    • 1970-01-01
    • 2011-03-31
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    相关资源
    最近更新 更多