如何获得每个li的点击事件,而不是全部

我试图让这个按钮显示一个隐藏的div onClick在每个li中将显示在绝对定位的post div。 问题是,点击后,它显示所有li的所有隐藏div。 我使用wordpress + buddypress,所以每个li的id都有一个唯一的ID

 <li id="activity-" class="activity" > 
//my pop in stuff

这是我认为可行的jquery。 注意:我正在使用.on()因为会动态添加li。

 $(document).on( 'click' , '.activity button#show' , function() { $('.action').show(); }); 

从某种意义上说它确实有效,但是它显示了屏幕上每个li的所有.action div's ,我只想显示那个被点击的li按钮。 我尝试使用.each()但它没有用。 我错了(明显大声笑)

有任何想法吗?

在事件处理程序中, $(this)指的是单击的一个按钮。 所以你需要做的是从$(this)并遍历DOM树以获得你想要显示的那个.action

这是一种方法,我觉得更好:

 $(document).on('click' , '.activity button' , function() { $(this).closest(".activity").find(".action").show(); }); 

另外,您的HTML意味着您对多个元素使用相同的id值。 这是非法的,应该修复 – 它只会引起麻烦只是时间问题。 大多数情况下,将共享class分配给元素而不是相同的id并使用它是很好的。

你需要使用$(this).closest('.activity').find('.action')而不是$('.action')

原因很简单 – 当你使用$('.action')你只需检索与选择.action匹配的所有元素,这与事件完全无关。

我使用ul而不是文档来捕获click事件

 $('ul#parentofyouractivitylis').on('click', '.activity button', function(){ $(this).closest(".activity").find(".action").show(); }); 

您不能使用单个绑定来执行它们,因为无法使用.activitybutton#show .activity以相同的方法.activity 。 你可以这样做:

 $(document).on('click', '.activity', function() { $(this).find(".action").show(); }); $(document).on('click', '#show', function() { $(this).closest(".action").show(); });​ 

这是一个小提琴:

 // html 
  • Loading 1...
  • Loading 2...
  • ​ // css div { display:none; }​ // js $("li").click(function(){ // hide any showing ones $("li > div").hide(); $(this).find("> div").show(); });