【问题标题】:How to enable/disable bootstrap selectpicker by ickeck checkbox如何通过ickeck复选框启用/禁用引导选择选择器
【发布时间】:2015-02-03 16:56:57
【问题描述】:

checkbox旁边还有selectpicker。我想如果复选框被选中,selectpicker 将被启用,如果未选中,selectpicker 将被禁用。 我写了这个不起作用(Here is the fiddle):

$('.checkBox').on('ifChecked', function(event) {
    $(this).parents('.clearfix').find('.selectpicker').removeAttr('disabled');

});
$('.checkBox').on('ifUnchecked', function(event) {
    $(this).parents('.clearfix').find('.selectpicker').attr('disabled');
});

【问题讨论】:

    标签: jquery bootstrap-select icheck


    【解决方案1】:

    更改完成后,您应该刷新选择器

    这是一个有效的fiddle

    刷新 UI 的代码是

    $('.selectpicker').selectpicker('refresh');
    

    更多信息请参考DOCS

    我发现的另一个错误是,要禁用你必须使用

    attr('disabled',true)
    

    不是

    attr('disabled')
    

    【讨论】:

    【解决方案2】:

    如果您的选择器有多个选项,则当前接受的答案非常慢。 (可能会导致半秒左右的挂起,这对于禁用某些东西来说太长了。)

    这对我有用:

    禁用:

    $("#yourSelect").prop("disabled", true);
    $(".selectpicker[data-id='yourSelect']").addClass("disabled");
    

    启用:

    $("#yourSelect").prop("disabled", false);
    $(".selectpicker[data-id='yourSelect']").removeClass("disabled");
    

    这还有一个额外的好处,即实际显示选择被禁用时的值。 (这是选择框的行为)

    我有点惊讶官方文档建议使用 refresh 只是为了禁用它,它需要的时间太长了。

    【讨论】:

    • $(".selectpicker").next("button").addClass("disabled");
    【解决方案3】:

    这是用来禁用的。

    $('.selectpicker').prop('disabled', true);
    $('.selectpicker').selectpicker('refresh');
    

    这是为了找回来

    $('.selectpicker').prop('disabled', false);
    $('.selectpicker').selectpicker('refresh');
    

    【讨论】:

      【解决方案4】:

      与其他在淘汰赛中的引导选择实现相比,这里有一点改进。

      它的作用是在 value、selectedOptions、options 和禁用绑定中订阅 observables。

      因此,如果您在下面使用“bootstrapSelect”的同一元素上使用“禁用”绑定,那么它将根据您绑定到禁用绑定的 observable 的值添加或删除禁用的类。

      ko.bindingHandlers.bootstrapSelect = new function () {
          this.after = ['options', 'value', 'selectedOptions'];
      
          this.init = function (element, valueAccessor, allBindings, viewModel, bindingContext) {
              var $e = $(element);
      
              var subscriptions = [];
      
              var doRefresh = function () {
                  $e.selectpicker('refresh');
              };
      
              var addSubscription = function (bindingKey, callBack) {
                  var targetObs = allBindings.get(bindingKey);
      
                  if (targetObs && ko.isObservable(targetObs)) {
                      subscriptions.push(targetObs.subscribe(callBack));
                  }
              };
      
              addSubscription('disable', () => {
                  $e.addClass('disabled');
                  doRefresh();
              });        
              addSubscription('options', doRefresh);
              addSubscription('value', doRefresh);           // Single
              addSubscription('selectedOptions', doRefresh); // Multiple
      
              ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
                  while (subscriptions.length) {
                      subscriptions.pop().dispose();
                  }
              });        
          };
      
          this.update = function (element, valueAccessor, allBindings, viewModel, bindingContext) {
              var $e = $(element);        
          };
      };
      export default ko.bindingHandlers.bootstrapSelect;
      

      这是一个例子:

      <select class="form-control" data-live-search="true" data-bind="disable: readOnly, bootstrapSelect: { }, options: selectOptions, optionsText: 'name', optionsValue: 'value', value: userValue"></select>
      <span class="validationMessage" style="" data-bind="visible: !userValue.isValid() && (userValue.isModified() || userValue.isValidating()), text: userValue.error()"></span>
      

      在这个例子中,我有一个名为 readOnly 的可观察对象绑定到禁用绑定,我可以在真假之间切换它。如果我为 readOnly 设置 true ,那么禁用绑定会向元素添加一个“禁用”属性,引导程序选择会忽略该属性。但是在 bootstrap select 绑定中对“readOnly”的订阅将被触发,并导致它检查禁用绑定的值,然后添加或删除 bootstrap select 尊重的类“disabled”。

      订阅 options、value 和 selectedOptions 还确保在 Bootstrap select 上调用刷新以使用新选项或选定值更新 gui。

      【讨论】:

        【解决方案5】:

        我使用下面的方法来禁用选择器中的选择器。 希望对你有用。

        $('.selectpicker').selectpicker('refresh');
        $("#yourSelect").prop("disabled", true);
        $("button[data-id='yourSelect']").prop("disabled", true);
        // You can customize the display of content inside the input this way
        $("button[data-id='yourSelect'] .filter-option-inner-inner").text('No data available);
        

        禁用选择标签后我的图像

        【讨论】:

          猜你喜欢
          • 2011-10-09
          • 2021-08-17
          • 2013-11-17
          • 1970-01-01
          • 2020-07-31
          • 1970-01-01
          • 1970-01-01
          • 2015-08-02
          • 1970-01-01
          相关资源
          最近更新 更多