【问题标题】:if checkbox checked change the select options如果选中复选框,则更改选择选项
【发布时间】:2016-03-03 04:30:57
【问题描述】:

我想根据复选框生成选择选项。就像我有 3 个值的复选框:电影、视频剪辑、串行和 <select> 表单。当我单击“电影”时,我希望 <select> 带有选项:喜剧、恐怖和当我“视频剪辑”时 <select> 将值更改为:嘻哈、流行。

我用 javascript 和 jquery 尝试了几个小时,但仍然没有:/

【问题讨论】:

  • 为复选框添加适当的事件监听器。然后,根据所选复选框的值显示所需的选择元素。无论如何,如果您提供代码 sn-ps 会更容易帮助您。
  • 有你的代码会很好
  • 这可能会对你有所帮助 -- stackoverflow.com/a/27621468/1355315
  • 您真的在寻找仅客户端的解决方案吗?
  • 感谢大家的快速解答和解决方案。我将尝试在我的网站上实施。 “您真的在寻找仅客户端的解决方案吗?” - 不,选择选项将从 mysql 数据库中下载,但我想我会设法自己完成。

标签: javascript jquery checkbox


【解决方案1】:

你可以尝试使用 jQuery 和类似的事件吗?

$(function () {
  var checked = ["Check 1", "Check 2", "Check 3"];
  var unchecked = ["Uncheck 1", "Uncheck 2", "Uncheck 3"];
  function updateSelect (arr) {
    $("select").html("");
    $.each(arr, function (i, v) {
      $("select").append('<option value="' + v + '">' + v + '</option>');
    });
  }
  updateSelect (unchecked);
  $("#check").change(function () {
    if (this.checked)
      updateSelect(checked);
    else
      updateSelect(unchecked);
  });
});
<script src="https://code.jquery.com/jquery-1.9.1.js"></script>
<label><input type="checkbox" id="check" /> Check</label><br />
<select></select>

您的 sn-p 现已准备就绪。看看:

$(function () {
  var iFilm = ["Comedy", "Horror", "Sci-Fi"];
  var iVideoClip = ["Hip-Hop", "Pop", "Rap"];
  var iSerial = ["Serial 1", "Serial 2", "Serial 3"];
  $("input:checkbox").change(function () {
    $("select").html("");
    $("input:checked").each(function () {
      addItemsFromArray(eval("i" + this.id));
    });
  });
  function addItemsFromArray (arr) {
    $.each(arr, function (i, v) {
      $("select").append('<option value="' + v + '">' + v + '</option>');
    });
  }
});
<script src="https://code.jquery.com/jquery-1.9.1.js"></script>
<label><input type="checkbox" id="Film" /> Film</label><br />
<label><input type="checkbox" id="VideoClip" /> VideoClip</label><br />
<label><input type="checkbox" id="Serial" /> Serial</label><br />
<select></select>

注意:我使用过eval,强烈建议不要这样做。不使用eval,另一部分使用data-*属性。

$(function () {
  var data = {};
  data.iFilm = ["Comedy", "Horror", "Sci-Fi"];
  data.iVideoClip = ["Hip-Hop", "Pop", "Rap"];
  data.iSerial = ["Serial 1", "Serial 2", "Serial 3"];
  $("input:checkbox").change(function () {
    $("select").html("");
    $("input:checked").each(function () {
      addItemsFromArray(data[$(this).attr("data-content")]);
    });
  });
  function addItemsFromArray (arr) {
    $.each(arr, function (i, v) {
      $("select").append('<option value="' + v + '">' + v + '</option>');
    });
  }
});
<script src="https://code.jquery.com/jquery-1.9.1.js"></script>
<label><input type="checkbox" id="Film" data-content="iFilm" /> Film</label><br />
<label><input type="checkbox" id="VideoClip" data-content="iVideoClip" /> VideoClip</label><br />
<label><input type="checkbox" id="Serial" data-content="iSerial" /> Serial</label><br />
<select></select>

另一方面,如果您想一次只选择一个选项,请随时将 type="checkbox" 更改为 type="radio" 并提供相同的名称。

【讨论】:

    【解决方案2】:

    根据您的问题,我假设您有 3 个复选框,每个复选框具有不同的值。如果您的应用程序只允许 1 个选项,为什么不使用单选按钮呢?

    除此之外,它实际上很容易。只需将“onchange”事件侦听器放在您的复选框上,然后填充您的 &lt;select&gt; 标签(无论是使用预先编写的变量还是 ajax)

    原版 js 中的简单示例

    <input type="checkbox" value="film" id="film">
    <select id="someDropdown"></select>
    
    <script>
        var film = document.getElementById("film");
        film.addEventListener("change", function(){
            // populate the dropdown list
            var options = "<option>Comedy</option>" + "<option>Horror</option>"
            document.getElementById("someDropdown").innerHTML = options;
        });
    </script>
    

    【讨论】:

    • 确定单选按钮会更好
    • 您的解决方案似乎是最简单的一个。但它在我的测试站点上不起作用。 &lt;html&gt; &lt;head&gt; &lt;script type="text/javascript"&gt; var film = document.getElementById("film"); film.addEventListener("change", function(){ // populate the dropdown list var options = "&lt;option&gt;Comedy&lt;/option&gt;" + "&lt;option&gt;Horror&lt;/option&gt;"; document.getElementById("someDropdown").innerHTML = options; }); &lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;input type="checkbox" value="film" id="film"&gt; &lt;select id="someDropdown"&gt;&lt;/select&gt; &lt;/body&gt; &lt;/html&gt;
    • 你不能把脚本放在&lt;head&gt;标签上,因为浏览器从上到下读取html并且在解析document.getElementById("film")时,还没有id="film"的DOM。试着把它放在结束 &lt;/body&gt; 标记之前,看看它是否有效
    • 多么简单的错误:p 非常感谢 Joshua!
    【解决方案3】:

    试试这个:

    var filmValues = {
        comedy: 'Comedy',
        horror: 'Horror'
    }
    
    $('#filmCb').change(function () {
        if ($(this).is(":checked")) {
            $.each(filmValues, function (key, value) {
                $('#filmSelect')
                    .append($("<option></option>")
                    .attr("value", key)
                    .text(value));
            });
        } else {
            $('#filmSelect').empty()
        }
    });
    

    html:

    <form action="">
        <input id="filmCb" type="checkbox" name="param" value="film">Film
        <select id="filmSelect"></select>
        <br>
    </form>
    

    【讨论】:

      【解决方案4】:
      <?php // Genre 
      
      $query  = "SELECT genre_pl FROM genre WHERE is_movie = 1 ";
      $result = mysqli_query($connection, $query);
      // Test if there was a query error
      confirm_query($result); ?>
      <script> var options_film = ""; </script>
          <?php
              while($row = mysqli_fetch_row($result)){
            ?>
          <pre> <?php var_dump($row) ?> </pre>
          <script> options_film += "<option>" + <?php echo json_encode($row); ?> +     "</option>"; </script>
                 <?php } ?>
      
      <?php mysqli_free_result($result); ?>
      <script type="text/javascript">
      var film = document.getElementById("film");
          film.addEventListener("change", function(){
          // populate the dropdown list
          document.getElementById("someDropdown").innerHTML = options_film;
      });
      

      有用!但我觉得这是草率的编程。像这样将javascript与php混合可以吗?

      【讨论】:

        【解决方案5】:

        这里有一小段代码可以单独选中每个复选框。

        $(document).ready(function(){
        $("#Film").click(function(){
           `$("#Film").prop("checked", false);
        });
        $("#VideoClip").click(function(){
            `$("#VideoClip").prop("checked", false);
        });
        $("#Serial").click(function(){
            `$("#Serial").prop("checked", false);
        });
        });
        

        还有 HTML:

         <label><input type="checkbox" id="Film" data-content="iFilm" /> Film</label><br />
         <label><input type="checkbox" id="VideoClip" data-content="iVideoClip" /> 
         VideoClip</label><br />
         <label><input type="checkbox" id="Serial" data-content="iSerial" /> Serial</label> 
         <br 
         />
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-23
          • 1970-01-01
          • 2020-06-22
          • 2018-04-01
          相关资源
          最近更新 更多