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;
        });
    });

我有三个选项卡或菜单项:当您单击一个时,此代码将隐藏其他选项卡的内容部分。

其中,以下部分是这个问题的重点:

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

正如代码片段所示,我试图在单击图片选项卡时调用一个函数。按照我的代码使用断点,我看到我成功捕获了 $target,但是,即使它与 tabPics 匹配,函数调用也被跳过,其余代码正常运行。

如果我匹配了 $target 和 tabPics,为什么当我满足 if 语句中的条件时它会跳过函数调用?

谢谢您的帮助。

4

3 回答 3

3

您原来的方法不起作用,因为您正在测试两个不同对象的相等性:

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 仍然会将上述内容视为错误,因为当使用对象比较对象时===,对象必须是完全相同的对象,它们不能是具有相同内容的不同对象。

以下链接可能有用:

你会如何比较 jQuery 对象?

希望这能消除混乱。我可以看到您的逻辑在哪里,并且在另一种语言中它可能是有意义的,这不是===在 JavaScript 中测试对象时的工作方式。

于 2013-03-21T08:24:19.100 回答
0

您目前无法在 jquery (.entry-link:not) 中定位伪选择器来设置 CSS 属性。

于 2013-03-21T06:56:42.980 回答
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 回答