2014-07-22 114 views
0

我有一个带有链接的手风琴,但每当我点击链接时,手风琴都认为我正试图关闭它。它的设置使您可以点击手风琴的任何地方打开或关闭它,但是当我点击链接时,请忽略手风琴的行为,然后按照链接进行操作。手风琴预防点击链接

<div class="wrap"> 
    <div class="top"></div> 
    <div class="middle"> 
     <h3>Always showing</h3> 
     <div class="hidden"> 
      <p>I want to <a href="/lets-gooo">follow this link</a>.</p> 
     </div> 
    </div> 
    <div class="bottom"></div> 
</div> 


$('.wrap').on(touchClick, function (e) { 
    if ($(this).hasClass('active')) { 
     $(this).removeClass('active'); 
     $(this).find('.hidden').slideUp('fast'); 
     return false; 
    } 
    $('.wrap').each(function (index, el) { 
     $(this).removeClass('active'); 
     $(this).find('.hidden').slideUp('fast'); 
    }); 
    $(this).find('.hidden').slideDown('fast'); 
    $(this).addClass('active'); 
}); 

回答

1

未经测试,但我相信这将工作

$('.wrap').on(touchClick, function (e) { 
//other code 
}); 
$("a").click(function(event) { 
    event.stopPropagation(); 
}); 

应该停止冒泡和触发手风琴事件的点击。

作为一个事后的使用,如果你想使用touchClick像你手风琴,你可以重写它。

$("a").on(touchClick, function (e) { 
    e.stopPropagation(); 
}); 
+0

在哪里添加?抱歉,我对jquery很新。 – itsclarke

+0

编辑显示,我假设你可以使用.on(touchClick)而不是.click(),就像你使用wrap一样。 – DasBeasto

1

你需要告诉浏览器冒泡使用event.stopPropagation()事件链停止事件(见this so post,详细了解这一点)。这意味着jQuery永远不会知道点击事件,因此它不会关闭手风琴。

在特定链接的点击事件侦听器添加这种,它应该工作,你希望它:

$('.wrap a').each(function(e){ 
    e.stopPropagation(); // stop the event from bubbling up 
}); 

然而,不event.preventDefault()混淆,这不会冒泡停止的情况下,但它会阻止浏览器在点击时打开链接。