我有一个要点击的按钮列表。如果点击的链接是新的,我想要一个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语句不起作用。
感谢您的帮助。
答案 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');
});
});