Javascript jQuery切换开关复选框-更改“;勾选“;属性延迟

Javascript jQuery切换开关复选框-更改“;勾选“;属性延迟,javascript,jquery,checkbox,togglebutton,Javascript,Jquery,Checkbox,Togglebutton,我创建了一个切换开关复选框,并应用了以下逻辑: 1] 如果用户单击切换开关class=“os_section-slider”,脚本将检查是否选中包含元素名称的输入 1-A]如果元素已选中,则将其更改为未选中,并将该元素添加到名为os_tagsToRemove 1-B]如果元素未选中,则将其更改为选中,并将该元素添加到名为os_tagsToAdd HTML <span class="os_section-name">first</span> <input type="

我创建了一个切换开关复选框,并应用了以下逻辑:

1] 如果用户单击切换开关
class=“os_section-slider”
,脚本将检查是否选中包含元素名称的
输入

1-A]如果元素已选中,则将其更改为未选中,并将该元素添加到名为
os_tagsToRemove

1-B]如果元素未选中,则将其更改为选中,并将该元素添加到名为
os_tagsToAdd

HTML

<span class="os_section-name">first</span>
<input type="checkbox" class="os_section-check" id="first" checked="checked">
<label class="os_section-slider" for="first"></label>

<div class="line-space-between"></div>

<span class="os_section-name">second</span>
<input type="checkbox" class="os_section-check" id="second">
<label class="os_section-slider" for="second"></label>
我的问题是,当我的页面重新加载,我的切换开关出现在模式框中,我尝试单击切换按钮时,我必须单击两次,直到选中的属性被添加/删除

第一次单击总是只将值推入数组或将其从数组中删除,但不应用
$(this).prev().attr(“checked”,true)
nor
$(this).prev().attr(“选中”,false)


但是,在第二次单击每个切换器按钮后,从那一刻起,一切正常。

添加此项以加载添加/删除阵列:

// Onload remove array fill
$("[type='checkbox']").each(function(){
  if( $(this).is(":checked") ){
    os_tagsToRemove.push($(this).attr("id"));
  }else{
    os_tagsToAdd.push($(this).attr("id"));
  }
});
然后,你的逻辑完全颠倒了

首先,当您单击标签(定义为
for=“anID”
)时,协同响应复选框的选中状态已经改变。您不必编写脚本

然后,当您查看是否选中该复选框时,您必须知道该验证是在复选框状态更改后进行的。所以我颠倒了你的
if
条件

var os_tagsToAdd=[];
var os_tagsToRemove=[];
$(“.os_section-slider”)。单击(函数(){
console.clear();
var os_标记名=$(this.prev().attr(“id”);
//如果在单击后选中此选项
如果($(this).prev()为(“:选中”)){
if($.inArray(os_标记名,os_标记添加)=-1){
os_标记添加.push(os_标记名);
}
os_tagsToRemove.splice($.inArray(os_标记名,os_tagsToRemove),1);
//如果在单击后未选中此选项
}否则{
if($.inArray(os_标记名,os_标记存储移动)=-1){
os_标记名StoreMove.push(os_标记名);
}
os_标记名添加.splice($.inArray(os_标记名,os_标记名添加),1);
}
console.log(os_tagsToAdd);
控制台日志(os_tagsToRemove);
});
//Onload删除数组填充
$(“[type='checkbox']”)。每个(函数(){
如果($(this).is(“:checked”)){
os_tagsToRemove.push($(this.attr(“id”));
}否则{
os_tagsToAdd.push($(this.attr(“id”));
}
});
console.log(os_tagsToAdd);
控制台日志(os_tagsToRemove)

第一
标签
第二

标签
我不明白你怎么点击你的空标签。。。我不明白为什么你把点击事件附加在标签上而不是复选框上。解释一下。@LouySpatriceBesette我需要我的脚本来更改每个元素的checked属性,就像更改页面的源代码一样。当您有一个默认复选框时,如果您选中/取消选中一个元素的输入,它将不会将
checked=“checked”
硬编码到页面的源代码中。Haa。。。好的,这是关于默认的支票。。。等等,你的脚本已经修好了。如果不清楚,请随时提问!请注意,直接单击复选框会使所有。。。但我想你还是用一些漂亮的CSS来隐藏它
// Onload remove array fill
$("[type='checkbox']").each(function(){
  if( $(this).is(":checked") ){
    os_tagsToRemove.push($(this).attr("id"));
  }else{
    os_tagsToAdd.push($(this).attr("id"));
  }
});