【问题标题】:select multiselect option limit up to 2选择多选选项限制最多 2 个
【发布时间】:2012-08-05 11:03:42
【问题描述】:

我正在为不同的主题使用多选我想将选择限制为最多 2 个,并且如果用户取消选择,则以相同的方式禁用另一个,同样该选项必须可供用户使用。

<select multiple="multiple" class="subjects" name="subjects[]" style="float:left;width:205px;" size="5">
  <option value='1'>subject1</option>
  <option value='2'>subject2</option>
  <option value='3'>subject3</option>
  <option value='3'>subject3</option>
</select>

到目前为止,我已经实现只取消选择2之后选择的最后一个选项,代码如下

    /**
     * Make sure the subject's limit is 2
     */
    $(".subjects option").click(function(e){

        if ($(this).parent().val().length > 2) {
            $(this).removeAttr("selected");
        }
    });

谢谢。

【问题讨论】:

标签: javascript html multi-select


【解决方案1】:

改进的 jQuery 示例,注意 (else enable) 选项,这修复了之前示例中永久禁用选择选项的错误。还删除了“请仅选择两个选项”。尽可能的错误消息。 http://jsfiddle.net/c9CkG/25/

jQuery(document).ready(function () {

jQuery("select").on("change", function(){
  var msg = $("#msg");

  var count = 0;

  for (var i = 0; i < this.options.length; i++)
  {
    var option = this.options[i];

    option.selected ? count++ : null;

    if (count > 2)
    {
        option.selected = false;
        option.disabled = true;
        msg.html("Please select only two options.");
    }else{
        option.disabled = false;
        msg.html("");
    }
  }
});

});

【讨论】:

    【解决方案2】:

    作为对 RobG 答案的改进,如果计数 > 2,您可以取消选择一个选项。

    有关使用 jQuery 的工作示例,请参阅:http://jsfiddle.net/c9CkG/3/

    function checkSelected(el) {
      var msgEl = document.getElementById('msg');
      var count = 0;
    
      for (var i=0, iLen=el.options.length; i<iLen; i++)
    
          el.options[i].selected? count++ : null;
    
          // Deselect the option.
          if (count > 2) {
              el.options[i].selected = false;
              el.options[i].disabled = true;
    
              msgEl.innerHTML = 'Please select only two options';
          }
    }
    

    【讨论】:

    • 几乎关闭,但是当用户取消选择任何一个选定选项时,另一个选项应该再次可供选择
    • 这应该足够简单,您可以实现,在更改时查看是否已达到最大值,更改为取消选择且未禁用,然后启用其他选项。
    【解决方案3】:

    类似下面的东西可以完成这项工作:

    function checkSelected(el) {
      var msgEl = document.getElementById('msg');
      var count = 0;
    
      for (var i=0, iLen=el.options.length; i<iLen; i++)
          el.options[i].selected? count++ : null;
    
      msgEl.innerHTML = count > 2? 'Please select only two options' : '';
    }
    </script>
    
    <span>Please select a maximum of two options:</span>
    <select multiple onchange="checkSelected(this);">
      <option>0
      <option>1
      <option>2
      <option>3
    </select>
    <br>
    <span id="msg"></span>
    

    我认为禁用选项不是一个好主意,您只关心在提交表单时只选择了两个。在那之前,没关系。

    【讨论】:

      【解决方案4】:

      $(document).ready(function() {
      
        var last_valid_selection = null;
      
        $('#testbox').change(function(event) {
          if ($(this).val().length > 5) {
            alert('You can only choose 5!');
            $(this).val(last_valid_selection);
          } else {
            last_valid_selection = $(this).val();
          }
        });
      });
      

      【讨论】:

      • 为什么 OP 应该“试试这个”?解释您的建议/答案通常被认为是一种很好的形式。即使在技术上是正确的,仅代码的答案也可能令人惊讶地缺乏信息。 好的答案将始终解释所做的工作以及这样做的原因,不仅适用于 OP,而且适用于可能会发现此问题并正在阅读您的答案的 SO 的未来访问者。
      猜你喜欢
      • 2021-03-22
      • 1970-01-01
      • 2016-04-18
      • 2021-02-22
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多