Javascript jQuery循环不切换属性

Javascript jQuery循环不切换属性,javascript,jquery,each,Javascript,Jquery,Each,我在每个循环中都有一个jQuery来循环元素,但一旦状态改变,它就不会更新 <span class="btn btn-icon btn-rounded btn-info social_selector" data-network="twitter" data-account-id="1" data-active='1'> <i class="fa fa-twitter"></i> </span> <span class="btn btn-ic

我在每个循环中都有一个jQuery来循环元素,但一旦状态改变,它就不会更新

<span class="btn btn-icon btn-rounded btn-info social_selector" data-network="twitter" data-account-id="1" data-active='1'>
<i class="fa fa-twitter"></i>
</span>
<span class="btn btn-icon btn-rounded indigo social_selector" data-network="facebook" data-account-id="1" data-active='1'>
<i class="fa fa-facebook"></i>
</span>
<span class="btn btn-icon btn-rounded btn-warning social_selector" data-network="instagram" data-account-id="1" data-active='1'>
<i class="fa fa-instagram"></i>
</span>
当jQuery循环运行时,每次单击都会更改活动数据,因此我不确定是否是因为Dom正在循环之间更新

//社交选择器
$(文档).on('click','social_selector',function(){
if($(this).attr('data-active')==1){
$(this.addClass('btn-disabled');
$(this.attr('data-active',0);
}否则{
$(this.removeClass('btn-disabled');
$(this.attr('data-active',1);
}
var networks=“”;
$(“.social_选择器”)。每个(函数(索引,元素){
如果($(元素).data('active')=“1”){
网络+=$(元素).data('network')+',';
}
});
$('社交网络'持有者').val(网络);
});

data()
方法替换为
attr()
方法

   $(".social_selector").each(function(index, element){
        if($(element).attr('data-active') == "1"){
            networks += $(element ).data('network')+', ';
        }
    });

将您的代码更改为使用
.data('active')
而不是
.attr('data-active')
的以下代码,或者您可以将它们全部更改为
.attr('data-active')
,无论哪种方式,只要确保它们都相同,您有一个不同的代码:

$(文档).on('click','social_selector',function(){
var$this=$(this);
if($this.data('active')==1){
$this.addClass('btn-disabled');
$this.data('active',0);
}否则{
$this.removeClass('btn-disabled');
$this.data('active',1);
}
var networks=“”;
$(“.social_选择器”)。每个(函数(索引,元素){
if($(元素).data('active')==1){
网络+=$(元素).data('network')+',';
}
});
$('社交网络'持有者').val(网络);
});

啁啾
脸谱网
instagram
查看我的

检查一下你是否需要这个

$(document).on('click','.social_selector',function(){

        if($(this).attr('data-active') == 1){
            $(this).addClass('btn-disabled');
            $(this).attr('data-active', 0);
        }else{
            $(this).removeClass('btn-disabled');
            $(this).attr('data-active', 1);
        }

        var networks = "";
        $(".social_selector").each(function(index, element){
            if($(element).attr('data-active') == 1){
                networks += $(element ).attr('data-network')+', ';
            }
        });
        $('#social_network_holder').val(networks);
alert(networks)
    });

您是否尝试过使用
if($(element).data('active')==“1”)
Yep,仍然得到相同的结果。当我打印.data('active')时,我会更新第一个,然后之后的所有内容都不会更改。通常情况下,单击操作会发生这种情况,但我会使用$(document)。on()但我不能为每个函数使用$(document)?除了
.data('active')==“1”
,您确定您有id为
社交网络持有者的
输入,而不是
div
或其他需要
.html()
?你不在这里展示那部分;)@gurvinder372这一点很好,我想这一定是他的输入,OP不会向我们展示的一件事,更新了提琴,更新了文本框,你应该提到你所做的更改,以便OP了解哪里出了问题;)@很高兴是的,我只是很匆忙,即使那时你比我更早发帖,伙计:D
$(document).on('click','.social_selector',function(){

        if($(this).attr('data-active') == 1){
            $(this).addClass('btn-disabled');
            $(this).attr('data-active', 0);
        }else{
            $(this).removeClass('btn-disabled');
            $(this).attr('data-active', 1);
        }

        var networks = "";
        $(".social_selector").each(function(index, element){
            if($(element).attr('data-active') == 1){
                networks += $(element ).attr('data-network')+', ';
            }
        });
        $('#social_network_holder').val(networks);
alert(networks)
    });