Javascript 防止在单击时取消选中复选框(无禁用或只读)

Javascript 防止在单击时取消选中复选框(无禁用或只读),javascript,jquery,events,checkbox,Javascript,Jquery,Events,Checkbox,我正在使用一个复选框,我希望人们能够选中/取消选中它。 然而,当他们取消选中时,我使用jQueryUI模式弹出窗口来确认他们确实想要这样做。因此,他们可以单击“确定”或“取消”,我希望只有在他们单击“确定”时才取消选中我的复选框。 这就是为什么我想捕捉uncheck事件,以防止复选框在视觉上被取消选中,并且如果用户碰巧单击OK,我会以编程方式取消选中它 我怎么能这么做 PS:我知道如果用户单击“取消”,我可以重新检查它,但这会触发check事件,这是我不想要的 $("#checkboxID").

我正在使用一个复选框,我希望人们能够选中/取消选中它。 然而,当他们取消选中时,我使用jQueryUI模式弹出窗口来确认他们确实想要这样做。因此,他们可以单击“确定”或“取消”,我希望只有在他们单击“确定”时才取消选中我的复选框。
这就是为什么我想捕捉uncheck事件,以防止复选框在视觉上被取消选中,并且如果用户碰巧单击OK,我会以编程方式取消选中它

我怎么能这么做

PS:我知道如果用户单击“取消”,我可以重新检查它,但这会触发
check
事件,这是我不想要的

$("#checkboxID").on("click", function (e) {
    var checkbox = $(this);
    if (checkbox.is(":checked")) {
        // do the confirmation thing here
        e.preventDefault();
        return false;
    }
});
preventDefault()
将禁用您的
输入的默认行为[type=“checkbox”]

在你的弹出div上

$("#ok").on('click',function(){
    $("#yourCheckBoxId").attr("checked",true);
});
比如:

$("#test").on('change', function() {
    this.checked=!this.checked?!confirm('Really uncheck this one ?'):true;
});
​
纯CSS解决方案

选中复选框,如-

input[type="checkbox"] {
    pointer-events: none;
}

效果非常好,现在您可以在选择的任何元素上切换复选框

如何使用HTML禁用属性

   $("#checkboxID").click(function(e) { 
      var checkbox = $(this);
      if (checkbox.is(":checked")) {
       //check it 
      } else {
       // prevent from being unchecked
        this.checked=!this.checked;
      }
   });
<input type="checkbox" name="my_name" value="my_value" disabled> My value<br>
我的价值
链接:


+1不错。你也可以把它做得更短/更清晰:
this.checked=this.checked | |!确认('真的取消选中此项?')我完全错了,但我不能再改变我的反对票了,对不起,我认为这个答案可能与提问者想要的相反。实现它阻止我选中复选框,而不是取消选中它们。我在if条件中添加了“!”,但是一切都很好。是的,这与阻止复选框被取消选中相反。如果有任何奇怪的UI覆盖,OP也可以使用stopPropagation()来阻止它。我知道jQueryUI有奇怪的覆盖来控制主复选框。。。所以这有时对我有帮助:)你的答案的代码格式不好,一些注释或解释肯定会有帮助这是一个非常简单的解决方案+1这非常简洁,但当你有一个指向它的标签时,它就失败了,这是确保复选框不被取消选中的最有效方法,因为它不会在任何javascript上回复。如果您不需要运行javascript,那么就不要运行。节省处理能力并保持javascript文件大小较小,以便快速交付页面。
<input type="checkbox" name="my_name" value="my_value" disabled> My value<br>