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

クリックされた要素にクラスが関連付けられていない場合は、(v1.6 以降)target.attr('class')が返されます。undefinedFF では、 を呼び出そうとしたときに表示されるエラーとして表されます.match。(クロムでは、「未定義のメソッドマッチを呼び出すことはできません」になります)

不在クラスのチェックを追加します。if (typeof target.attr('class') === "undefined") return;

于 2012-06-12T15:10:00.840 に答える
0

その関数をドキュメント全体の「クリック」イベントにバインドしています。したがって、クラス属性が設定されていない要素のクリックを含め、クリックするとハンドラーがトリガーされます。これは、定義された 'class' 属性を持つ要素 (任意のブラウザー) でのみテストした場合は正常に機能しますが、値に対してメソッドを呼び出そうとするため、(任意のブラウザーで) エラーがスローされます。.match()undefined

「jQuery 1.6 の時点で、.attr() メソッドは、設定されていない属性に対して undefined を返します。」 APIリファレンス

jQuery を使用しているので、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 に答える
0

ええと...私のために働いていますか?

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

于 2012-06-12T14:54:35.650 に答える