【问题标题】:HTML Multiselect LimitHTML 多选限制
【发布时间】:2011-05-07 07:39:39
【问题描述】:

是否可以对多选设置限制?

下面是一个示例代码,用户可以选择多个值。

<select multiple="multiple" name="choose">
<option value="1">Value 1</option>
<option value="2">Value 2</option>
<option value="3">Value 3</option>
<option value="4">Value 4</option>
<option value="5">Value 5</option>
<option value="6">Value 6</option>
</select>

但是,如何限制用户选择不超过 3 个值。 有什么想法吗?

【问题讨论】:

标签: html select limit


【解决方案1】:

你可以使用 jQuery

  $("select").change(function () {
      if($("select option:selected").length > 3) {
          //your code here
      }
  });

【讨论】:

    【解决方案2】:

    您可以在客户端通过 javascript 执行此操作,然后在服务器端添加检查以防客户端禁用 javascript。

    下面是一些基本的客户端代码,可以让您了解一下:

    <html>
        <body>
            <form onsubmit="validate()">
                <select multiple="multiple" id="choose" name="choose"> 
                    <option value="1">Value 1</option> 
                    <option value="2">Value 2</option> 
                    <option value="3">Value 3</option> 
                    <option value="4">Value 4</option> 
                    <option value="5">Value 5</option> 
                    <option value="6">Value 6</option> 
                </select><br>
                <input type="submit">
            </form>
            <script>
            function validate()
            {
                var selectChoose = document.getElementById('choose');
                var maxOptions = 2;
                var optionCount = 0;
                for (var i = 0; i < selectChoose.length; i++) {
                    if (selectChoose[i].selected) {
                        optionCount++;
                        if (optionCount > maxOptions) {
                            alert("validation failed, not submitting")
                            return false;
                        }
                    }
                }
                return true;
            }
            </script>
        </body>
    </html>
    

    【讨论】:

      【解决方案3】:

      不允许选择超过 3 个元素的脚本(而不是仅在提交时验证它)。

      http://jsfiddle.net/v33sszgp/

      var verified = [];
      document.querySelector('select').onchange = function(e) {
        if (this.querySelectorAll('option:checked').length <= 3) {
            verified = Array.apply(null, this.querySelectorAll('option:checked'));
        } else {
          Array.apply(null, this.querySelectorAll('option')).forEach(function(e) {
              e.selected = verified.indexOf(e) > -1;
          });
        }
      }
      

      请注意,防止在select 上实际选择该项目会带来一些额外的复杂性,并且它会验证用户的操作并在无效时将其还原。

      【讨论】:

        【解决方案4】:

        RedFilter 有正确的想法,通过 javascript 进行验证。尚未测试,但您可以执行以下操作:

        var options = document.all.tags("option");
        var selectedCounter = 0;
            
        for (var i=0; i < options.length; i++) {
           if (options[i].selected) {
              selectedCounter++;
           }
           checkCounter();
        }
        
        function checkCounter() {
           //disable all options here
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-11-04
          • 1970-01-01
          • 2012-08-05
          • 1970-01-01
          • 1970-01-01
          • 2016-08-11
          • 2019-04-02
          相关资源
          最近更新 更多