2011-07-18 34 views

回答

2

只是取消处理程序中的return false

否则,点击事件会出现泡泡,并且由于按钮嵌套在打开表单的li元素中,因此两个元素都会收到点击。

取消按钮尝试hide它,然后li重新打开它..

$("#h-nav li#hn-contact #cancel").click(function() { 
      $("#h-nav li#hn-contact").find("div.dd").hide(); 
      return false; 
     }); 

演示在http://jsfiddle.net/gaby/5CpeW/2/


注意,因为id都是独一无二的,你不必须在你的jQuery选择器中描述层次结构。只需使用最后一个id的选择器并转发。

0

尝试:

$("#h-nav li#hn-contact").click(function() { 
    $(".dd").show(); 
}); 

但它会更好,给该分区的ID并使用它。

1

这是由于事件冒泡。在点击事件回调中使用return false。

$("#h-nav li#hn-contact #cancel").click(function() { 
    $("#h-nav li#hn-contact").find("div.dd").hide(); 
    return false; 
}); 

有关此主题的更多信息,请访问Events Order这是当你将要处理在未来的javascript值得理解。

这实际上给你回采传播的跨浏览器的方式:

if (!e) var e = window.event; 
e.cancelBubble = true; 
if (e.stopPropagation) e.stopPropagation(); 
+0

感谢您的链接 - 总是很好,以获得更好的理解事情! –

0

我也建议使用切换(),而不是显示/隐藏的,那么你并不需要改变时,手动行为它被点击

+0

我最初使用切换,但在最终版本中,我将动画不透明而不是显示和隐藏。切换不允许我想要结束的视觉效果。 –