2014-06-16 160 views
0

我想创建一个事件点击按钮将显示菜单,但由于每个模块都有这样一个按钮,当我点击其他div的按钮时,当前菜单保持不变,是任何方式来解决这个问题?jQuery切换隐藏一个元素

我试图创造一些甚至在切换的第一部分,但它造成更大的问题:我需要点击两次另一个按钮使其出现......

HTML:

<ul> 
<li class="item"> 
<div class="portfolio-image-wrapper"> 
    <a class="hideModelLink" href="#">ModelLink</a> 
    <img src="assets/img/gallery/2.jpg" alt="" /> 
    <div class="edit-menu"> 
    <a href="#" target="_blank">Rename</a> 
    <a href="#" target="_blank">Delete</a> 
    </div> 
    <div class="item-info-overlay"></div> 
</div> 
<div class="item-info"> 
    <h4 class="text-dark no-margin title semi-bold"><a class="" target="_blank" href="#">Creative Illustration</a></h4> 
    <p>3/21/2014</p> 
</div> 
<a class="edit-button"></a> 
</li> 
... 
</ul> 

JS:

$('.edit-button').toggle(function(){ 
    $(this).siblings('.portfolio-image-wrapper').find('.edit-menu').css({ 
     display: 'block' 
    }); 
    $(this).siblings('.portfolio-image-wrapper').find('.item-info-overlay').css({ 
     background: 'none' 
    }); 
    $(this).css({ 
     'background-color': '#f5f5f5' 
    }); 
}, 
function(){ 
    $(this).siblings('.portfolio-image-wrapper').find('.edit-menu').css({ 
     display: 'none' 
    }); 
    $(this).siblings('.portfolio-image-wrapper').find('.item-info-overlay').css({ 
     background: 'rgba(153, 153, 153, 0.2)' 
    }); 
    $(this).css({ 
     'background-color': '#ffffff' 
    }); 
}); 
+3

你应该把这个问题的'jsFiddle'鼓励人们在视觉上与它玩。 – Gavin42

+0

我认为jQuery已经删除了您正在使用的'.toggle()版本(以多个回调为参数的版本)。 – jfriend00

+0

«toggle»方法在jQuery 1.8中被弃用,并在jQuery 1.9中被移除:[http://api.jquery.com/toggle-event/](http://api.jquery.com/toggle-event/)。使用[jQuery Migrate](http://jquery.com/download/#jquery-migrate-plugin)**或**使用替代代码来实现您的目标,请参阅以下文章:[jQuery:使用.toggle的替代方法()这是弃用](http://stackoverflow.com/questions/14478994/jquery-use-an-alternative-to-toggle-which-is-deprecated)或[jQuery .toggle事件不推荐使用?] (http://stackoverflow.com/questions/17583215/jquery-toggle-event-deprecated-what-to-use)。 – Cholesterol

回答

0

尝试切换您的通话toggle回功能身边......

$('.edit-button').toggle(function() { 
    $(this).siblings('.portfolio-image-wrapper').find('.edit-menu').css({ 
     display: 'none' 
    }); 
    $(this).siblings('.portfolio-image-wrapper').find('.item-info-overlay').css({ 
     background: 'rgba(153, 153, 153, 0.2)' 
    }); 
    $(this).css({ 
     'background-color': '#ffffff' 
    }); 
}, function() { 
    $(this).siblings('.portfolio-image-wrapper').find('.edit-menu').css({ 
     display: 'block' 
    }); 
    $(this).siblings('.portfolio-image-wrapper').find('.item-info-overlay').css({ 
     background: 'none' 
    }); 
    $(this).css({ 
     'background-color': '#f5f5f5' 
    }); 
}); 

演示在这里:http://jsfiddle.net/9jbUm/

此外,一些增强的代码在性能方面,和可读性...

$('.edit-button').toggle(function() { 

    // it is good to cache jquery objects, to save on expensive execution time 
    $this = $(this); 
    $this.css({ 'background-color': '#ffffff' }); 

    // also cache derived jquery objects... 
    $siblings = $this.siblings('.portfolio-image-wrapper'); 
    // use the jquery wrapper function to select within a specific context 
    $('.item-info-overlay', $siblings).css({ background: 'rgba(153, 153, 153, 0.2)' }); 
    // use `hide` instead of `.css({display: 'none'})` 
    $('.edit-menu', $siblings).hide(); 

}, function() { 

    $this = $(this); 
    $this.css({ 'background-color': '#f5f5f5' }); 

    $siblings = $this.siblings('.portfolio-image-wrapper'); 

    $('.edit-menu', $siblings).show();  
    $('.item-info-overlay', $siblings).css({ background: 'none' }); 

}); 

演示在这里:http://jsfiddle.net/9jbUm/1/

此外,如果您的[email protected]+中没有that version of toggle,那么您可以使用something like...

$.fn.toggleClick = function(){ 

    var functions = arguments ; 

    return this.click(function(){ 
      var iteration = $(this).data('iteration') || 0; 
      functions[iteration].apply(this, arguments); 
      iteration = (iteration + 1) % functions.length ; 
      $(this).data('iteration', iteration); 
    }); 
}; 

$('.edit-button').toggleClick(function() { 

    /* ... */ 

}); 

演示在这里:http://jsfiddle.net/9jbUm/2/

+0

请不要这样做: $(this).siblings('。portfolio-image-wrapper')。find('。edit-menu')。css({ display:'none' }); ('。item-info-overlay')。css({rgba(153,153,153,0.2)' } ); $(this).css({'background-color':'#ffffff' }); 这对性能来说真的很糟糕,改变类并且通过CSS来做这些改变,甚至可以使用过渡效果。 – Sakai

+0

奇怪的问题,但肯定''重命名'和'删除'选项应该只在编辑我之后第一次可见? –

+0

谢谢!将使用类更改来实现该效果。 – Toonic