【问题标题】:jQuery Spectrum color picker can't disablejQuery Spectrum 颜色选择器无法禁用
【发布时间】:2021-04-29 07:46:02
【问题描述】:

我将 Spectrum 颜色选择器添加到我的网站,因为我需要一个具有不透明度的颜色选择器,并且我有一个用于启用/禁用的复选框,它正在使用一个简单的颜色选择器,但在这里我无法设法禁用它,即使使用属性。

我尝试更改每个 Spectrum 属性或仅更改禁用的属性,但它不起作用。

$(document).ready(function() {
  $('#bg_color').spectrum({
    type: "color",
    showPalette: false,
    showPaletteOnly: true,
    togglePaletteOnly: true,
    hideAfterPaletteSelect: true,
    showInput: true,
    disabled: true
  });

  $('#boolean_check_color').change(function() {
    if ($(this).prop('checked') == true) {
      $("#bg_color").spectrum({
        type: "color",
        hideAfterPaletteSelect: true,
        showInput: true,
        showInitial: true,
        disabled: true
      });
    } else if (!$(this).prop('checked')) {
      $("#bg_color").spectrum({
        type: "color",
        hideAfterPaletteSelect: true,
        showInput: true,
        showInitial: true,
        disabled: false
      });
    }
  })
});
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/spectrum/1.8.1/spectrum.min.css" integrity="sha512-KuSX+43gVS5MEIJD2ewtrFPOHqC1PJnL8o2f5ciggPC0JUZ8XV0QXlfArO1mSzKkVFdRjsBDfrTU96C5SuRfqQ==" crossorigin="anonymous" />

<div class='p-2'>
  <label for="bg_color">Background color</label>
  <input id="bg_color" name="bg_color" value='#ffffff'>
  <div class="btn-group" role="group" aria-label="Basic checkbox toggle button group">
    <label for="boolean_check_color">or transparent &nbsp</label>
    <input type="checkbox" class="btn-check" id="boolean_check_color" autocomplete="off" name="boolean_check_color" checked>
  </div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/spectrum/1.8.1/spectrum.min.js" integrity="sha512-1aNp9qKP+hKU/VJwCtYqJP9tdZWbMDN5pEEXXoXT0pTAxZq1HHZhNBR/dtTNSrHO4U1FsFGGILbqG1O9nl8Mdg==" crossorigin="anonymous"></script>

【问题讨论】:

    标签: javascript jquery spectrumjs


    【解决方案1】:

    在 Spectrum 库的 documentation 中,有 enabledisable 方法可用于根据复选框的 checked 属性设置控件的状态。试试这个:

    $(document).ready(function() {
      $('#bg_color').spectrum({
        type: "color",
        showPalette: false,
        showPaletteOnly: true,
        togglePaletteOnly: true,
        hideAfterPaletteSelect: true,
        showInput: true,
        disabled: true
      });
    
      $('#boolean_check_color').change(function(e) {
        $("#bg_color").spectrum(e.target.checked ? 'disable' : 'enable');
      })
    });
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/spectrum/1.8.1/spectrum.min.css" integrity="sha512-KuSX+43gVS5MEIJD2ewtrFPOHqC1PJnL8o2f5ciggPC0JUZ8XV0QXlfArO1mSzKkVFdRjsBDfrTU96C5SuRfqQ==" crossorigin="anonymous" />
    
    <div class='p-2'>
      <label for="bg_color">Background color</label>
      <input id="bg_color" name="bg_color" value='#ffffff'>
      <div class="btn-group" role="group" aria-label="Basic checkbox toggle button group">
        <label for="boolean_check_color">or transparent &nbsp</label>
        <input type="checkbox" class="btn-check" id="boolean_check_color" autocomplete="off" name="boolean_check_color" checked>
      </div>
    </div>
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/spectrum/1.8.1/spectrum.min.js" integrity="sha512-1aNp9qKP+hKU/VJwCtYqJP9tdZWbMDN5pEEXXoXT0pTAxZq1HHZhNBR/dtTNSrHO4U1FsFGGILbqG1O9nl8Mdg==" crossorigin="anonymous"></script>

    【讨论】:

    • 谢谢,它正在工作。由于我的英语不完美,我可能会传递一些信息。我在这里有一个问题:在函数中传递的 e 参数是复选框标签吗?所以你的目标是选中的属性?
    • is the e argument passed in function the checkbox tag 这是引发的事件对象。 target 属性是对引发事件的元素的引用 - 在本例中为复选框
    【解决方案2】:

    这是我的版本。由于一些unsolved issues,花了一些时间找出正确的方法

    但与manual相比,它们无关紧要

    我建议你在加载时测试复选框的选中状态

    $(document).ready(function() {
      const $chk = $('#boolean_check_color');
      const $bg  = $("#bg_color");
      const dis = $chk.prop("checked") 
      const setState = disable => $bg.spectrum(disable ? "disable" : "enable");
     
      $('#bg_color').spectrum({
        type: "color",
        showPalette: false,
        showPaletteOnly: true,
        togglePaletteOnly: true,
        hideAfterPaletteSelect: true,
        showInput: true,
      });
      setState(dis)
      $chk.on("click", function() {
         setState(this.checked)
      })
    });
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/spectrum/1.8.1/spectrum.min.css" integrity="sha512-KuSX+43gVS5MEIJD2ewtrFPOHqC1PJnL8o2f5ciggPC0JUZ8XV0QXlfArO1mSzKkVFdRjsBDfrTU96C5SuRfqQ==" crossorigin="anonymous" />
    
    <div class='p-2'>
      <label for="bg_color">Background color</label>
      <input id="bg_color" name="bg_color" value='#ffffff'>
      <div class="btn-group" role="group" aria-label="Basic checkbox toggle button group">
        <label for="boolean_check_color">or transparent &nbsp</label>
        <input type="checkbox" class="btn-check" id="boolean_check_color" autocomplete="off" name="boolean_check_color" checked>
      </div>
    </div>
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/spectrum/1.8.1/spectrum.min.js" integrity="sha512-1aNp9qKP+hKU/VJwCtYqJP9tdZWbMDN5pEEXXoXT0pTAxZq1HHZhNBR/dtTNSrHO4U1FsFGGILbqG1O9nl8Mdg==" crossorigin="anonymous"></script>

    【讨论】:

    • 好的,所以这种方法更安全,是吗?顺便说一句,当我用选择器更改颜色时,我的颜色应该显示的情况保持为白色。我是否必须在某处链接标签的 value 属性或者它是其他任何东西。
    • 我不明白你的意思。请添加一些代码来说明您的意思
    • 看看你的代码 sn-p,当我从选择器中改变颜色时,小方块不知何故保持白色。
    • 不在我的 chrome 中
    猜你喜欢
    • 2015-12-08
    • 1970-01-01
    • 2011-05-07
    • 2011-02-26
    • 1970-01-01
    • 2012-11-10
    • 2011-02-16
    • 2010-12-12
    • 1970-01-01
    相关资源
    最近更新 更多