如何获得每个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(); });
您不能使用单个绑定来执行它们,因为无法使用.activity
或button#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(); });