3

我正在对不同的主题使用多选我想将选择限制为 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

4 回答 4

5

改进的 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("");
    }
  }
});

});

于 2013-11-08T16:04:37.900 回答
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';
      }
}
于 2012-08-08T11:11:21.860 回答
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>

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

于 2012-08-08T11:00:54.417 回答
0

$(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();
    }
  });
});
于 2017-02-17T06:11:21.513 回答