我正在尝试这样做:
data-status
的{{1}}属性获取ID,并将其存储为.addlink
。post_id
将从.mar-post_id
.finished-reading
醇>
我有以下代码,但它不起作用。我能做错什么?
#statusfor-post_id
以下是HTML标记。
jQuery(".addlink").click(function(){
var post_id = jQuery(this).attr("data-status");
jQuery(".mar-"+post_id).click(function() {
jQuery("#statusfor-"+post_id).toggleClass( "finished-reading" );
});
});
答案 0 :(得分:1)
我已经从您的代码中创建了一个fiddle来测试它,它可以按照您的预期运行。
但如果你有不同的html结构可能会出现问题,即如果.mar-*
嵌套在.addlink
内。这种情况下的问题是您每次都会添加新的点击事件,因此如果您点击.mar-*
,您将触发.addlink
的点击事件,添加新的点击事件监听器,因此切换将触发多次。
如果没有看到完整的页面结构,很难猜测如何解决这个问题,我建议的最好的事情就是看看.one()
。
问题更新后:
这是一个肮脏的黑客攻击,它只为元素添加一个侦听器:jsfiddle。请注意,_data
适用于jQuery 1.8+,在此之前它可用作.data
(source)。
我不建议使用此功能,因为_data
是私有属性,因此将来可能会中断。
您还可以使用不含useCapture
属性的vanilla JS addEventListener
。
更好的方法:
我想到的一件事是更改元素的结构或在添加点击事件时更改。每次点击某个内容时添加一个事件是一个不好的做法,我建议你在元素添加到页面后立即添加所有点击监听器(在domready / window加载或从ajax调用接收数据时)然后不要之后不会改变事件。