1

次の jquery を検討してください。

$('.entry-links:not(.entry-links-processed)').each(function(){
        $(this).addClass('entry-links-processed');
        $('li a', this).click(function(event){
            $target = $(event.target);
            var tabPics = $('#tab-pics>a');
            if($target === tabPics){
                tabTest.getPics();
            }
          $('.entry-links li a').removeClass('active');
          $(this).addClass('active');
          var id = $(this).attr('href');
          $('.entry-box:not(' + id + ')').hide();
          $(id).show();
            return false;
        });
    });

3 つのタブまたはメニュー項目があります。1 つをクリックすると、このコードは他の項目のコンテンツ部分を非表示にします。

このうち、次の部分がこの質問の焦点です。

                  $target = $(event.target);
            var tabPics = $('#tab-pics>a');
            if($target === tabPics){
                tabTest.getPics();
            }

コード スニペットが示すように、写真タブがクリックされたときに関数を呼び出そうとしています。ブレークポイントを使用してコードをたどると、 $target が正常にキャプチャされていることがわかりますが、それが tabPics と一致していても、関数呼び出しはスキップされ、残りのコードは正常に実行されます。

$target と tabPics を一致させた場合、if ステートメントで条件を満たしたときに関数呼び出しをスキップするのはなぜですか?

助けてくれてありがとう。

4

3 に答える 3

3

2 つの異なるオブジェクトの等価性をテストしていたため、元の方法は機能しませんでした。

var $target = $(event.target);
var tabPics = $('#tab-pics>a');

セレクターまたは既存の dom 要素で jQuery を呼び出すと、一致すると判断した要素をラップするバージョンのそれ自体が返されます。このオブジェクトは毎回異なるため、次のコード:

if ( $target === tabPics ) {
  /// this wont be reached
}

次のように言っているのと同じです:

if ( {} === {} ) {
  /// neither will this
}

上記のコードでは、両方のオブジェクトが視覚的に同じように見えますが、そうしても次のようになります。

if ( {a:123} === {a:123} ) {
  /// nope...
}

===オブジェクトを使用してオブジェクトを比較する場合、まったく同じオブジェクトでなければならず、同じコンテンツを持つ異なるオブジェクトであってはならないため、JavaScript は依然として上記を false として扱います。

次のリンクが役立つ可能性があります。

jQuery オブジェクトをどのように比較しますか?

混乱が解消されることを願っています。私はあなたのロジックがどこに向かっていたかを見ることができます.別の言語ではそれは理にかなってい===ます.オブジェクトをテストするときにJavaScriptでどのように機能するかではありません.

于 2013-03-21T08:24:19.100 に答える
0

問題を解決しました。私はまだこのコードが機能するはずだと思いますが:

       if($target === tabPics){
            tabTest.getPics();
        }

何らかの理由で機能しません...しかし、.is()の使用は実際に機能します!したがって、コードは次のようになります。

            $target = $(event.target);
            var tabPicsLi = $('#tab-pics');
            var tabPics = $('a', tabPicsLi);
            if($target.is(tabPics)){
                tabTest.getPics();
            }

そして、それは正常に機能します。そうは言っても、誰かがこの投稿を見て、私の元のコード構成を確認し、その特定の方法が機能しなかった理由を確認する必要がある場合は、返信をいただければ幸いです。私の過ちから学ぶことは私にとってかけがえのないことです。

于 2013-03-21T08:08:43.363 に答える