写入data- *属性并使用jQuery获取它.data()
可能重复:
jQuery .data()不更新DOM
我在使用on属性时遇到问题。 我写了一小组方法来发送api调用。
标记是这样的:
unfollow
并有一个这样的事件捕获:
$(document).on('click','.action', function(){ var t={}; t.args={}; t.args.global_id=$(this).data('global-id'); t.global_id=t.args.global_id; t.action=$(this).data('action'); t.identifier=t.action + '_v2'; alert('here is action: ' + t.action); api_post_v1(t); });
api_post_v1正确发送呼叫。
有一些代码可以处理回调,它将标记设置为:
follow
这个代码就像:
$foo=$('.action[data-action=unfollow][data-global-id='+global_id+']'); $foo.attr('data-action','follow');
关键是数据动作。 我想要调用上面的事件处理程序来说它是’跟随’,但它说它仍然是’取消关注’。
顺序如下:
- 加载页面,data-action =’unfollow’
- 点击这个,api调用得到,你没有关注这个用户; 回调设置data-action =’follow’
- 再次单击此值,数据操作将回显为“取消关注”而不是“关注”
我怎么能告诉jQuery刷新这个事件的绑定? 我认为这就是$(document).on的作用。
谢谢
data-*
attributes和jQuery的.data()
方法不可互换。 用它来得到它:
t.action = $(this).attr('data-action');
您似乎将jQuery的data
方法与HTML5的data-*
属性混合在一起。 这是两件不同的事情。 他们彼此互动的唯一时间是你第一次在一个元素上调用.data
。
当您调用.data
,jQuery会查找任何data-*
属性,并将其添加到data
集合中。 但是, 这只发生过一次 。 对.data
后续调用不会查看元素的data-*
属性。
引用jQuery文档 :
data-
属性在第一次访问data-
属性时被拉出,然后不再被访问或变异(然后所有数据值都在内部存储在jQuery中)。
由于你使用.attr('data-action', 'follow')
来设置它,你应该使用.attr('data-action')
来获取它。
注意: $('.action[data-action=unfollow]')
不会选择通过jQuery的.data
设置action
的元素。 同样,这两者不可互换。