javascript - 使用事件监听器更改单击时复选框的状态

标签 javascript

我想阻止点击复选框时的默认行为(其新状态将取决于 API 响应)。

首先我停用默认行为:

cb.addEventListener("click", function(e){
    e.preventDefault();
    e.stopPropagation();
}

然后我尝试更改自己的复选框状态:

cb.addEventListener("click", function(e){
    e.preventDefault();
    e.stopPropagation();
    console.log("Before : " + this.checked);
    this.checked = !this.checked;
    console.log("After : " + this.checked);
}

-> // If I start with a checked checkbox :
-> Before : false
-> After : true

-> // If I start with an unchecked checkbox :
-> Before : true
-> After : false

但是这样我有两个问题:

  1. 视觉上状态似乎没有变化。
  2. 我的复选框的 checked 属性的显示值是其在切换之前状态的负值,我不明白为什么(当我从选中复选框,如果不是,则为 true)。

这是一个fiddle .

我还尝试将事件监听器绑定(bind)到 change 事件。

最佳答案

我尝试的是更改mousedown上的视觉状态并跳过click上的事件 Prop

var cb = document.getElementById("checkbox");
cb.addEventListener("click", function(e) {       
    e.preventDefault();
});
cb.addEventListener("mousedown", function(e){
    e.preventDefault();
    e.stopPropagation();
    console.log("Before : " + this.checked, e.target.checked);
    e.target.checked = !this.checked;
    console.log("After : " + this.checked);
});

关于javascript - 使用事件监听器更改单击时复选框的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52222154/

相关文章:

php - Disqus评论分页

javascript - 在公共(public) Assets 目录中包含 .html 文件?

javascript - 动态生成的容器上的 Bootstrap 下拉菜单 z-index

javascript - 对 Observable 的多个订阅

javascript - Javascript 和 datediff mysql 中的日期之间的日期差异不相等

javascript - 设置主干模型

javascript - 为每个嵌套的 child 分配样式和 Prop

javascript - Angular 日期选择器

javascript - 显示/隐藏效果

javascript - Mongoose 种群