2012-07-24 59 views
0

我的目标是上下切换两个图像。为什么我的点击处理程序在点击2次后失败?

这是我拥有的,它的工作原理部分。

如果这是OK,然后我失去了什么?
当我点击它停止工作两次....

这里是我的代码:

$(document).ready(function() { 
     $(".collapse").click(function() { 
      $("#box").hide(); 
      $(".collapse").replaceWith('<span class="open"></span>'); 
      $(".open").click(function() { 
       $("#box").show(); 
       $(".open").replaceWith('<span class="collapse"></span>'); 
      }); 
     }); 
    }); 
+0

我们需要查看您的HTML。 – jfriend00 2012-07-24 20:50:57

+0

@ jfriend00不,我们不 – Neal 2012-07-24 20:52:44

+0

其他人则提供答案应该帮助,但仅供参考,点击停止工作,因为要更换的单击事件绑定到 – MrOBrian 2012-07-24 20:54:55

回答

1

好吧......而不是你replaceWith只是做:

$(".open").removeClass("open").addClass("collapse"); 
//and 
$(".collapse").removeClass("collapse").addClass("open"); 

而变化.click(使用on(...)):

$(document).on("click", ".collapse", function() { 
    .... 
}); 

把所有在一起:

$(document).ready(function() { 
    $(document).on("click", ".collapse, .open", function() { 
     $("#box").toggle(); 
     $(this).toggleClass("open", "collapse"); //toggles btw the two classes 
    }); 
}); 
+0

我不知道你把他们放在一起部分 – Huangism 2012-07-24 20:55:15

+0

@Huangism对不起,现在** **我修好了^ _^ – Neal 2012-07-24 20:56:14

+0

,所以我会投了 – Huangism 2012-07-24 20:57:07

0

侑被封闭两个click事件。分开它。试试下面的代码

$(document).ready(function() { 
      $(".collapse").click(function() { 
       $("#box").hide(); 
       $(this).removeClass('collapse'); 
         $(this).addClass('open'); 
      }); 
      $(".open").click(function() { 
       $("#box").show(); 
       $(this).removeClass('open'); 
         $(this).addClass('collapse'); 
      }); 
     }); 
+1

这不会解决它,你还在做替换 – Huangism 2012-07-24 20:57:32

+0

我更新了代码,现在试试 – 2012-07-24 21:00:40

+0

@BhushanKawadkar这个还是不会解决的:-P – Neal 2012-07-24 21:00:50

0

我建议你使用的CSS 代替

的jQuery:

$(".collapse").toggleClass('closed') 

的CSS:

.collapse { 
    background: url(image/arrow-up.jpg); 
} 
.collapse.closed { 
    background: url(image/arrow-down.jpg); 
} 
.collapse > #box { 
    display: block; 
} 
.collapse.closed > #box { 
    display: none; 
} 

希望这有助于。

+0

这怎么回事呢? – Neal 2012-07-24 20:58:13

+0

为什么使用jQuery替换箭头并显示div?你可以通过在jQuery中添加一个类,而不是改变这个div的子元素的风格,来达到这个目的。 – 2012-07-24 21:03:54

相关问题