我该怎么做,即使是"toggle_cart"也可以像"clickerHeader"一样点击但保留其悬停效果(见箭头)?
请参阅 http://jsfiddle.net/realitylab/STE48/3
$('.eventMenu > ul').toggleClass('no-js js');
$('.eventMenu .js ul').hide();
$(document).on("click", function(e) {
var $elem = $(e.target);
if ($elem.hasClass('clickerHeader')) {
$('.eventMenu .js ul').not($elem.next('ul')).hide();
$elem.next("ul").slideToggle();
} else if (!$($elem).parents('.contentHolderHeader').length) {
//} else {
$('.eventMenu .js ul').hide();
}
});
两个元素包装在一个div 中即可。http://jsfiddle.net/STE48/5/
.
在 CSS 中添加:
.eventMenu:hover .no-js .contentHolderHeader {
display: block;
}
还要向div.eventMenu .contentHolderHeader
添加display: none
。
将 JS 替换为:
$('.eventMenu > ul').toggleClass('no-js js');
$(".toggle_cart").click(function(e){
$(".contentHolderHeader").slideToggle();
e.stopPropagation();
});
$(".eventMenu").click(function(e){
e.stopPropagation();
});
$(document).click(function(){
$(".contentHolderHeader").slideUp();
});
删除 HTML 中的内部ul
。
使用/不使用 JS: http://jsfiddle.net/vuF9n/2/
对现有代码的最小更改是在单击函数的第一行之后添加以下两行:
if ($elem.hasClass('toggle_cart'))
$elem = $elem.next();
换句话说,如果单击了带有箭头的范围,则假装实际上单击了锚点元素。在上下文中:
$(document).on("click", function(e) {
var $elem = $(e.target);
if ($elem.hasClass('toggle_cart'))
$elem = $elem.next();
if ($elem.hasClass('clickerHeader')) {
// etc.
演示:http://jsfiddle.net/STE48/6/