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

Posted

技术标签:

【中文标题】防止复选框在单击时取消选中(不禁用或只读)【英文标题】:Prevent checkbox from unchecking when clicked (without disable or readonly) 【发布时间】:2012-08-21 18:06:35 【问题描述】:

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

我该怎么做?

PS:我知道如果用户单击 Cancel 后我可以重新检查它,但这会触发我不想要的check 事件。

【问题讨论】:

【参考方案1】:
$("#checkboxID").on("click", function (e) 
    var checkbox = $(this);
    if (checkbox.is(":checked")) 
        // do the confirmation thing here
        e.preventDefault();
        return false;
    
);

【讨论】:

我认为这个答案可能与提问者想要的相反。实施它使我无法选中复选框,而不是取消选中它们。我加了“!”到 if 条件,一切都很好。 是的,这与防止复选框被取消选中相反【参考方案2】:

类似:

$("#test").on('change', function() 
    this.checked=!this.checked?!confirm('Really uncheck this one ?'):true;
);
​

FIDDLE

【讨论】:

+1 不错。你也可以让它更短/更清晰:this.checked = this.checked || !confirm('Really uncheck this one ?'); 我完全错了,但我不能再改变我的反对票了,对不起【参考方案3】:

纯 CSS 解决方案

选择复选框喜欢 -

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

效果很好,现在您可以在您选择的任何元素点击上切换您的复选框。

【讨论】:

这是一个非常简单的解决方案 +1 这非常简洁,但是当你有一个指向它的标签时它会失败,因为它绕过了这个。【参考方案4】:
   $("#checkboxID").click(function(e)  
      var checkbox = $(this);
      if (checkbox.is(":checked")) 
       //check it 
       else 
       // prevent from being unchecked
        this.checked=!this.checked;
      
   );

【讨论】:

您的答案代码格式错误,一些 cmets 或解释肯定会有所帮助【参考方案5】:

如何使用 html disabled 属性?

<input type="checkbox" name="my_name" value="my_value" disabled> My value<br>

链接: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/disabled

【讨论】:

这是确保复选框未被取消选中的最有效方法,因为它不会回复任何 javascript。如果您不需要运行 javascript,请不要运行。节省处理能力并保持较小的 javascript 文件大小以实现快速页面交付。 虽然我用的是这个reference,但是标题说没有readonly或者disable【参考方案6】:
$("#yourCheckBoxId").on('change',function(e)
    e.preventDefault();
    $("#yourPopDiv").popup();
);

preventDefault() 将禁用 input[type="checkbox"] 的默认行为

在你的弹出 div 上

$("#ok").on('click',function()
    $("#yourCheckBoxId").attr("checked",true);
);

【讨论】:

如果有任何奇怪的 UI 覆盖,OP 也可以使用 stopPropagation() 来阻止它。我知道 jQuery UI 有奇怪的覆盖来控制主复选框......所以有时对我有帮助:)

以上是关于防止复选框在单击时取消选中(不禁用或只读)的主要内容,如果未能解决你的问题,请参考以下文章

easyui datagrid 怎么去除单击行选中事件

如果复选框选中禁用其他,如果未选中启用所有 JavaScript?

单击时如何取消选中复选框

如果选中/取消选中复选框,则启用/禁用提交按钮?

如何通过使用alpine js单击一个复选框来选中和取消选中所有复选框

单击模态对话框按钮后如何取消选中该复选框?