Jquery slidedown如果声明不比较$(this)

时间:2011-08-22 22:06:39

标签: javascript jquery

我有一个要点击的按钮列表。如果点击的链接是新的,我想要一个div向下滑动,但如果它与上次点击的链接相同,我只想让div向上滑动。

所以我的代码是:

var $lastflyout = '';
$('.links-text a').each(function(){
    $(this).click(function(){
        if($(this) == $lastflyout) {
            alert('last equals');
            $('#flyout').slideUp(500);
        }
        else {
            $('#flyout').slideUp(500);
            $('#flyout').slideDown(500);
        }
        $lastflyout = $(this);


    });

});

由于某种原因,它永远不会警告“最后的平等”,因此永远不会进入第一个if语句。我尝试警告$ lastflyout,它说它是第一次点击后的一个对象,但我不知道为什么第一个if语句不起作用。

感谢您的帮助。

5 个答案:

答案 0 :(得分:4)

两个等效对象不相等,除非它们是完全相同的对象。因为$()复制了一个对象:

$(this) == $(this)

总是假的。如果您只使用普通的JS对象而不是jQuery并为它创建别名而不是克隆它将起作用:

if(this == lastflyout) {
    alert('last equals');
    $('#flyout').slideUp(500);
}
else {
    $('#flyout').slideUp(500);
    $('#flyout').slideDown(500);
}
lastflyout = this;

答案 1 :(得分:2)

您是否尝试过比较元素本身而不是jQuery元素?

var lastflyout = '';
$('.links-text a').each(function(){
    $(this).click(function(){
        if(this == lastflyout) {
            alert('last equals');
            $('#flyout').slideUp(500);
        }
        else {
            $('#flyout').slideUp(500);
            $('#flyout').slideDown(500);
        }
        lastflyout = this;
    });
});

答案 2 :(得分:1)

比较两个jQuery对象根本不是一个好主意。它们可能是不同的jQuery对象,即使它们内部具有相同的HTML元素。

如果您希望采用这种方法,请在全局变量中保存this,而不是$(this),并与this进行比较。

我建议您一起摆脱全局变量,只需通过查看它的可见性来检查弹出窗口的状态。向上滑动后,jQuery使项目不可见,因此您可以检查它是否可见。

您可以在此处看到一个没有全局变量的示例:http://jsfiddle.net/jfriend00/sgXe8/

$(this).click(function() {
    var flyout = $("#flyout");
    if (flyout.is(":visible")) {
        flyout.slideUp(500);
    } else {
        flyout.slideDown(500);
    }
});

更好的是,.slideToggle()会为您进行比较:

$(this).click(function() {
    $("#flyout").slideToggle(500);
});

答案 3 :(得分:0)

请改用toggleSlide!看看http://jsfiddle.net/4LTSp/

<强> HTML:

<span class="links-text"><a href="#">Toggle Slide Link</a></span>

  <p id="flyout">
    This is the paragraph to end all paragraphs.  You
    should feel <em>lucky</em> to have seen such a paragraph in
    your life.  Congratulations!
  </p>

<强> jQuery的:

$(".links-text a").click(function () {
  $("#flyout").slideToggle("slow");
});

答案 4 :(得分:0)

由于您尝试引用最近点击的链接,我会将$ lastflyout指定为等于锚点的id或锚点的href。

尝试这样的事情:

var $lastflyout = '';
$('.links-text a').each(function(){
    $(this).click(function(){
        if($(this).attr('id') == $lastflyout) {
            alert('last equals');
            $('#flyout').slideUp(500);
        }
        else {
            $('#flyout').slideUp(500);
            $('#flyout').slideDown(500);
        }
        $lastflyout = $(this).attr('id');
    });
});

如果您没有每个锚的ID,您也可以使用它:

var $lastflyout = '';
$('.links-text a').each(function(){
    $(this).click(function(){
        if($(this).attr('href') == $lastflyout) {
            alert('last equals');
            $('#flyout').slideUp(500);
        }
        else {
            $('#flyout').slideUp(500);
            $('#flyout').slideDown(500);
        }
        $lastflyout = $(this).attr('href');
    });
});