【问题标题】:How to enable disable multiple DOM elements using Javascript如何使用 Javascript 启用禁用多个 DOM 元素
【发布时间】:2019-06-05 21:46:42
【问题描述】:

我正在尝试使用 DOM 操作启用许多单选按钮,以避免每次单击所有按钮以启用它们。

我试试这个:

document.getElementById("on").disabled = true; 

和:

on-off-btn.off.active.setAttribute("enable", ""); 

没有成功。我觉得我做错了吗?我的 HTML 如下所示:

    <form>
    <div class="on-off-wrapper">
    <fieldset class="enabled">
    <div label="On" title="on" class="on-off-btn on active">
    <input type="radio" id="on" name="on_off" value="on"> 
    <span>On</span></div>
    <div label="Off" title="off" class="on-off-btn off">
    <input type="radio" id="off" name="on_off" value="on"> 
    <span>Off</span></div></fieldset></div>
    </form>

这样的代码在 60 次左右总是相同的,所以这就是为什么如果我可以一次性启用所有功能会更简单。我尝试使用带有控制台的谷歌开发工具...

【问题讨论】:

    标签: javascript dom radio-button


    【解决方案1】:

    如果我正确理解您的问题,可以通过以下 DOMElement 方法禁用和启用 HTML 中的多个 checkbox 输入;

    // To set input disabled 
    element.setAttribute("disabled", "disabled") 
    
    // To set input enabled
    element.removeAttribute("disabled") 
    

    结合document.querySelectorAll(),可以实现你需要的如下:

    function disableAll() {
    
      // Select all inputs with name attribute of value on_off and iterate 
      // applying disabled attribute
      document.querySelectorAll('input[name="on_off"]').forEach(element => {
    
        element.setAttribute("disabled", "disabled");
      });
    }
    
    function enableAll() {
    
      // Select all inputs with name attribute of value on_off and iterate 
      // removing disabled attribute (to enable)
      document.querySelectorAll('input[name="on_off"]').forEach(element => {
    
        element.removeAttribute("disabled");
      });
    }
    <form>
      <div class="on-off-wrapper">
        <fieldset class="enabled">
          <div label="On" title="on" class="on-off-btn on active">
            <input type="radio" id="on" name="on_off" value="on">
            <span>On</span></div>
          <div label="Off" title="off" class="on-off-btn off">
            <input type="radio" id="off" name="on_off" value="on">
            <span>Off</span></div>
        </fieldset>
      </div>
    </form>
    
    <button onclick="enableAll()">Enable All</button>
    <button onclick="disableAll()">Disable All</button>

    更新

    要实现以下 cmets 中提到的更新切换行为,请参阅:

    // Select all radio buttons
    document.querySelectorAll('input[type="radio"]').forEach(function(input) {
    
      // When any radio button is clicked
      input.addEventListener('click', function() {
    
        // 1. Reset all radio buttons to unchecked state
        document.querySelectorAll('input[type="radio"]')
          .forEach(function(reset) {
            reset.checked = false;
          });
    
        // 2. Create a CSS selector to select all radio buttons that match the .on or .off
        //    parent of the current radio button being clicked
        const selector = (input.parentElement.classList.contains('on') ? '.on' : '.off') +
          ' input[type="radio"]';
    
        // 3. Select all radio buttons by selector (ie those that match this radio buttons
        //    .on or .off parent), and set to checked
        document.querySelectorAll(selector).forEach(function(set) {
          set.checked = true;
        });
      })
    });
    <form>
      <div class="on-off-wrapper">
        <fieldset class="enabled">
          <div label="On" title="on" class="on-off-btn on active">
            <input type="radio" id="on" name="on_off" value="on">
            <span>On</span></div>
          <div label="Off" title="off" class="on-off-btn off">
            <input type="radio" id="off" name="on_off" value="on">
            <span>Off</span></div>
        </fieldset>
      </div>
    </form>
    <form>
      <div class="on-off-wrapper">
        <fieldset class="enabled">
          <div label="On" title="on" class="on-off-btn on active">
            <input type="radio" id="on" name="on_off" value="on">
            <span>On</span></div>
          <div label="Off" title="off" class="on-off-btn off">
            <input type="radio" id="off" name="on_off" value="on">
            <span>Off</span></div>
        </fieldset>
      </div>
    </form>
    <form>
      <div class="on-off-wrapper">
        <fieldset class="enabled">
          <div label="On" title="on" class="on-off-btn on active">
            <input type="radio" id="on" name="on_off" value="on">
            <span>On</span></div>
          <div label="Off" title="off" class="on-off-btn off">
            <input type="radio" id="off" name="on_off" value="on">
            <span>Off</span></div>
        </fieldset>
      </div>
    </form>
    <form>
      <div class="on-off-wrapper">
        <fieldset class="enabled">
          <div label="On" title="on" class="on-off-btn on active">
            <input type="radio" id="on" name="on_off" value="on">
            <span>On</span></div>
          <div label="Off" title="off" class="on-off-btn off">
            <input type="radio" id="off" name="on_off" value="on">
            <span>Off</span></div>
        </fieldset>
      </div>
    </form>

    【讨论】:

    • 我尝试使用谷歌控制台,但它说未定义您的代码看起来很清晰,但似乎我错过了什么
    • 我做了一个截图,你可以在这里看到它的样子ibb.co/Rh4c7Bn@dacre-deny
    • 是的,正是因为现在我需要一一点击才能启用它们,这就是我尝试实现这一目标的原因
    • 我运行你 sn-p 并且它工作得很好,但我想我错过了一些东西,因为我在现场网站上尝试并且在控制台上没有发生任何事情,它说“未定义”
    • 查看新的屏幕截图ibb.co/SVGxB37 如您所见,我单击了一个按钮,但没有任何反应,只有单击的按钮从关闭变为开启,不明白为什么它不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 2021-12-01
    • 1970-01-01
    相关资源
    最近更新 更多