代码之家  ›  专栏  ›  技术社区  ›  Harrison

基于复选框活动启用/禁用输入[重复]

  •  0
  • Harrison  · 技术社区  · 7 年前

    请注意,我已经提到 this answer 我的解决方案目前正在使用这种方法。

    这是我的HTML:

    <head>
    <script>
    
    document.getElementById('average_price').onchange = function() {
        document.getElementById('average_price_symbol').disabled = !this.checked;
    
    };
    
    </script>
    </head>
    
    <center>
    <form action="/custom" method="POST">
        <h2>Generate Custom Report</h2>
            <br>
    
            <input type="checkbox" id="average_price" name="average_price"> <b>Average Price</b>
            <br>
            <input type="text" id="average_price_symbol" name="average_price_symbol" placeholder="symbol" disabled>
            <br>
    
            <input type="submit" value="RUN">
    </form>
    
    </center>
    

    当窗体加载时,文本字段被禁用,但是复选框不会更改字段的状态。我不太确定出了什么问题。

    3 回复  |  直到 7 年前
        1
  •  0
  •   David    7 年前

    您的脚本在加载HTML之前执行,因此找不到任何内容:

    document.getElementById('average_price')
    

    将脚本移动到页面底部,传统上只在 </body> 标签。

        2
  •  0
  •   AngelSalazar    7 年前

    通过编程禁用输入

    提醒:始终将脚本放在结束正文标记之前

    HTML

    <h2>Generate Custom Report</h2>
      <br>
      <input type="checkbox" id="average_price" name="average_price"> <b>Average Price</b>
      <br>
      <input type="text" id="average_price_symbol" name="average_price_symbol" placeholder="symbol" >
      <br>
      <input type="submit" value="RUN">
    

    JS

    var checkbox = document.getElementById('average_price');
    var input = document.getElementById('average_price_symbol');
    
    input.disabled = true;
    checkbox.addEventListener('change', function (e) {
      console.log('CHECKED', this.checked);
      input.disabled = !this.checked;
      (!input.disabled && input.focus());
    });
    
        3
  •  0
  •   jkort13    7 年前

    将代码添加到文档就绪函数将有所帮助。

    $('document').ready(function(){ document.getElementById('average_price') });