如何限制在 html 选择框中选择的选项?

IT技术 javascript jquery html forms
2021-02-22 18:28:17

我正在使用允许多选的表单中的 select 标签,但我希望最多选择 10 个。这可以使用 javascript 或 jquery 吗?

提前致谢!

6个回答

这里有一些完整的代码供您使用...一定要喜欢 Google AJAX API Playground :-)

编辑 1:注意:这只能让您选择 5 个,因为我不想复制/粘贴另外 10 个选项:-)

<!--
  copyright (c) 2009 Google inc.

  You are free to copy and use this sample.
  License can be found here: http://code.google.com/apis/ajaxsearch/faq/#license
-->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>Sample Select Maximum with jQuery</title>
    <script src="http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q">    </script>
    <script type="text/javascript">
    google.load("jquery", "1");

    $(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();
        }
      });
    });
    </script>
  </head>
  <body style="font-family: Arial;border: 0 none;">
    <select multiple id='testbox'>
      <option value='1'>First Option</option>
      <option value='2'>Second Option</option>
      <option value='3'>Third Option</option>
      <option value='4'>Fourth Option</option>
      <option value='5'>Fifth Option</option>
      <option value='6'>Sixth Option</option>
      <option value='7'>Seventh Option</option>
      <option value='8'>Eighth Option</option>
      <option value='9'>Ninth Option</option>
      <option value='10'>Tenth Option</option>
    </select>
  </body>
</html>

演示

@Topher,除非你准备好读心,否则不要回答!:)
2021-04-18 18:28:17
我不确定你是什么意思。如果last_valid_selection是数组,什么不会再次选择它
2021-04-29 18:28:17
您可能想要移出last_valid_selection全局范围并进入ready匿名函数。
2021-05-07 18:28:17
@贾斯汀约翰逊 - 好点。我仍然对什么不起作用感到困惑。在 Chrome 中完美运行(目前无法测试 IE)。
2021-05-13 18:28:17
这几乎是完美的!如果 last_valid_selection 是一个数组,它不会再次选择它。谢谢,不过!
2021-05-14 18:28:17

这会将用户限制为 3 个选项:

$("select").on("click", "option", function () {
    if ( 3 <= $(this).siblings(":selected").length ) {
        $(this).removeAttr("selected");
    }
});​​​​​​​​​​

小提琴:http : //jsfiddle.net/2GrYk/

如果我们使用键盘或滑动点击,这将不起作用。
2021-05-13 18:28:17

这个答案适用于这些情况:

  • 正常点击
  • 只有mousedown(鼠标在mouseup之前移到外面)
  • 键盘
  • 如果有相同值的不同选项

代码:

$('#mySelect').on('change', function() {
    if (this.selectedOptions.length < 4) {
        $(this).find(':selected').addClass('selected');
        $(this).find(':not(:selected)').removeClass('selected');
    }else
        $(this)
        .find(':selected:not(.selected)')
        .prop('selected', false);
});

演示

或者,对于不支持的旧浏览器selectedOptions

$('#mySelect').on('change', function() {
    var $sel = $(this).find(':selected');
    if ($sel.length < 4) {
        $sel.addClass('selected');
        $(this).find(':not(:selected)').removeClass('selected');
    }else
        $(this)
        .find(':selected:not(.selected)')
        .prop('selected', false);
});

演示

使用 jQuery,您可以将一个函数附加到更改事件,因为它是一个多选,所以 val() 将是一个数组。你总是可以检查数组的长度,如果它是预定义的大小,就可以做一些事情。以下代码演示了如何知道选择了多少项。

  $("#select").change(function(){
        alert($(this).val().length);
  });   
@tominated - 使用 jQuery,你可以简单地调用 $('#myselectbox_id').val(null);
2021-04-26 18:28:17
这将有很大帮助。有没有办法在选择框中取消选择所有内容?
2021-04-27 18:28:17
您可以使用: $("#select").val([]);在选择列表中不设置任何选项。
2021-04-30 18:28:17

弄清楚了!这是结果代码:

$(document).ready(function(){

var last_valid_selection = null;
var selected = "";

$("#recipient_userid").change(function(event){

    if ($(this).val().length > 10) {

        alert('You can only choose 10!');
        $(this).val(last_valid_selection);

    } else {

        last_valid_selection = $("#recipient_userid").val();

        $("#recipient_userid option:selected").each(function () {
            selected += "<li>" + $(this).text() + "</li>";
        });

        $("#currentlySelected").html(selected);
        selected = "";
    }

}).change();
});

感谢您的帮助!

Tominated,这不是一个论坛。您的贡献应该只存在于原始问题中(您可以随意编辑它)。您应该接受此处提供的众多优秀答案之一。
2021-04-27 18:28:17
对不起各位,我对此一无所知。
2021-05-04 18:28:17
彻底的,乔纳森是绝对正确的。这个想法是提出一个问题并选择最佳答案(您甚至会因此而获得一些声誉)。我很少不选择答案,更罕见的是我回答我自己的问题。然而,这个社区在这里互相帮助,我很高兴我们帮助了你。
2021-05-07 18:28:17