你好,
我遇到了jQuery的问题。我有一个元素,我替换的内容。但是,我还将data-action属性替换为另一个值。但是,当我再次单击该元素时,它仍然使用先前的data-action属性值运行代码。有没有办法强制jQuery使用新的?这是我想要的甚至可能吗?
我尝试.data()
,但结果相同。
的jQuery
$('#selector li').click(function() {
var action = $(this).data("action");
var item = $(".item").data("id");
$.ajax({
type: "POST",
data: "ticket=" + item,
url: "/run/" + action,
success: function(data) {
var jsonObj = jQuery.parseJSON(data);
if (jsonObj.valid == 'true') {
if (action == 'pick') {
$('li[data-action=pick]').html('Release').attr('data-action', 'release');
} else if (action == 'release') {
$('li[data-action=release]').html('Pick').attr('data-action', 'pick');
}
}
}
});
});
HTML
<li data-action="pick">Pick</li>
编辑:我认为我以前的评论有点不清楚。我想要更改它所属的属性。但是,当我再次单击该元素时,它仍然可以识别前一个属性,而不是新属性,因此无法运行正确的操作。
答案 0 :(得分:1)
$('[data-action="pick"]').attr('data-action','release');
没有按预期工作,此时数据值已经从节点属性解析为jQuery数据对象。
要修改数据对象,必须使用
$('[data-action="pick"]').data('action','release');
请注意,如果您希望以后通过新选择器选择节点属性,
$('[data-action="pick"]').attr('data-action','release').data('action','release');
然后,您可以使用$('[data-action="release"]')
参见相关内容: how would I store a javascript object as data attribute and edit it
答案 1 :(得分:0)
我指出评论:
尝试使用
.data('action' , 'release')
代替.attr('data-action', 'release')
,并确保使用'pick'
您可以查看This Answer特别是不要混合.data和.attr()调用的部分。使用其中一个。
虽然您使用.html
确定您需要Event binding on dynamically created elements?
$(document).on('click','#selector li',function(){
// code here
});