选择多选选项限制最多2

时间:2012-08-08 10:41:40

标签: javascript html multi-select

我正在使用multiselect用于不同的主题我想要将select最多限制为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");
        }
    });

谢谢。

4 个答案:

答案 0 :(得分:5)

改进了jQuery示例,注意(else enable)选项,这修复了以前禁用select选项的示例的永久性错误。同时删除了“请仅选择两个选项”。可能时出现错误消息。 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("");
    }
  }
});

});

答案 1 :(得分:2)

作为RobG答案的改进,你可以取消选择一个选项,如果它计数&gt; 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';
      }
}

答案 2 :(得分:1)

以下内容将完成这项工作:

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>

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

答案 3 :(得分:0)

column1|column3
a|1
a|2