在bootstrap 3中禁用单选按钮?

时间:2015-03-29 15:50:31

标签: javascript html twitter-bootstrap

如何禁用Bootstrap 3单选按钮?如果我从BS3 example开始并向每个输入元素添加disabled="disabled",则外观或行为不会发生变化:

<div class="container">
<div class="btn-group" data-toggle="buttons">
    <label class="btn btn-primary active">
        <input type="radio" name="options" id="option1" autocomplete="off" checked disabled="disabled">Radio 1 (preselected)</label>
    <label class="btn btn-primary">
        <input type="radio" name="options" id="option2" autocomplete="off" disabled="disabled">Radio 2</label>
    <label class="btn btn-primary">
        <input type="radio" name="options" id="option3" autocomplete="off" disabled="disabled">Radio 3</label>
</div>

演示:JSFiddle

我想这是因为disabled属性仅应用于now-invisible按钮而不是可点击的文本标签,但我在BS3文档中没有看到任何关于此的内容。

5 个答案:

答案 0 :(得分:20)

disabled类添加到标签中,如下所示

<div class="btn-group" data-toggle="buttons">
  <label class="btn btn-primary disabled">
    <input type="checkbox" autocomplete="off"> Checkbox 1 (pre-checked)
  </label>
  <label class="btn btn-primary active disabled">
    <input type="checkbox" autocomplete="off"> Checkbox 2
  </label>
  <label class="btn btn-primary disabled">
    <input type="checkbox" autocomplete="off"> Checkbox 3
  </label>
</div>

这是demo

答案 1 :(得分:7)

正如@giammin在对已接受答案的评论中所提到的,在输入元素上设置'disabled'在bootstrap的3.3.6中不起作用。 (本答复公布时的当前版本)。

完全同样的问题,我的解决方案是使用CSS属性“指针事件”。这可以确保元素和子元素永远不会成为单击事件的目标。然而,这不是一个万无一失的解决方案 - 用户仍然可以选中并使用空间来点击桌面浏览器上的隐藏元素。

.disabled-group
{
    pointer-events: none;
}

如果您在“ .btn-group ”元素中设置此项,则会完全禁用

<div class="btn-group disabled-group" data-toggle="buttons">
   <label class="btn btn-primary disabled">
      <input type="checkbox" autocomplete="off"> Checkbox 1 (pre-checked)
   </label>
   <label class="btn btn-primary disabled">
      <input type="checkbox" autocomplete="off"> Checkbox 2
   </label>
   <label class="btn btn-primary disabled">
     <input type="checkbox" autocomplete="off"> Checkbox 3
   </label>
</div>

' .disabled '类是可选的 - 用它来显示灰色和'cursor:not-allowed;'属性。

修复解决方案的讨论是在这个来源: https://github.com/twbs/bootstrap/issues/16703

答案 2 :(得分:4)

对于单选按钮组,将禁用的类添加到您希望禁用的类。 确保你有类似这样的代码:

$('.btn-group').on("click", ".disabled", function(event) {
    event.preventDefault();
    return false;
});

这将使按钮组内的所有.disabled分类按钮也被禁用。这也适用于无线电类型按钮组。

答案 3 :(得分:1)

您可以使用上述功能禁用标签内的输入[type =&#39; radio&#39;](bootstrap 3样式),

$("input[name='INPUT_RADIO_NAME']").prop("disabled", true);
$("input[name='INPUT_RADIO_NAME']").closest("div").css("pointer-events", "none");

以上再次启用,

$("input[name='INPUT_RADIO_NAME']").prop("disabled", false);
$("input[name='INPUT_RADIO_NAME']").closest("div").css("pointer-events", "auto");

您还可以扩展JQuery并创建一个虚拟禁用方法(可以使用更多功能升级),如下所示,

(function ($) {
    $.fn.disableMe = function () {
        // Validate.
        if ($.type(this) === "undefined")
            return false;

        // Disable only input elements.
        if ($(this).is("input") || $(this).is("textarea")) {
            // In case it is a radio inside a label.
            if ($(this).is("[type='radio']") && $(this).parent().is("label.btn")) {
                $("input[name='safeHtml']").closest("label").addClass("disabled");
                $(this).closest("div").css("pointer-events", "none");
            }

            // General input disable.
            $(this).prop("disabled", true);
        }
    };
    $.fn.enableMe = function () {
        // Validate.
        if ($.type(this) === "undefined")
            return false;

        // Enable only input elements.
        if ($(this).is("input") || $(this).is("textarea")) {
            // In case it is a radio inside a label.
            if ($(this).is("[type='radio']") && $(this).parent().is("label.btn")) {
                $("input[name='safeHtml']").closest("label").removeClass("disabled");
                $(this).closest("div").css("pointer-events", "auto");
            }

            // General input enable.
            $(this).prop("disabled", false);
        }
    };
    $.fn.toggleDisable = function () {
        if ($.type(this) === "undefined")
            return false;

        // Toggle only input elements.
        if ($(this).is("input") || $(this).is("textarea")) {
            var isDisabled = $(this).is(":disabled");

            // In case it is a radio inside a label.
            if ($(this).is("[type='radio']") && $(this).parent().is("label.btn")) {
                $("input[name='safeHtml']").closest("label").toggleClass("disabled");
                $(this).closest("div").css("pointer-events", isDisabled ? "auto" : "none");
            }

            // General input enale.
            $(this).prop("disabled", !isDisabled);
        }
    };
}(jQuery));

用法示例,

$("input[name='INPUT_RADIO_NAME']").disableMe();
$("input[name='INPUT_RADIO_NAME']").enableMe();
$("input[name='INPUT_RADIO_NAME']").toggleDisable();

答案 4 :(得分:0)

在bootstrap中如果要禁用任何输入类型或按钮,只需添加bootstrap的.disabled类,然后按钮就会被禁用。

喜欢这个

<input type="radio" class="btn btn-primary disabled">Primary Button</button>