jQuery属性更改,再次运行

时间:2017-06-07 23:13:58

标签: jquery

你好,

我遇到了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>

编辑:我认为我以前的评论有点不清楚。我想要更改它所属的属性。但是,当我再次单击该元素时,它仍然可以识别前一个属性,而不是新属性,因此无法运行正确的操作。

2 个答案:

答案 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
});