【问题标题】:How can I unselect an option from a multi select on a click ONLY if it is selected如果选择它,如何从单击多次选择中取消选择选项
【发布时间】:2013-05-22 16:36:30
【问题描述】:

我有一个多选元素,一旦我选择了一个选项,就不可能取消选择所有选项。 我需要在单击该选项时取消选择该选项,并且它之前已被选中。

我尝试了一些东西,但它们不起作用,因为每次我单击该选项时,它都会被选中,无论它是否被选中,因此无法知道它是否先前被选中并且应该被取消选中,或者它是否是第一次我我点击它来选择它

http://jsfiddle.net/JRgdv/

<select  multiple="multiple">
    <option>11111</option>
    <option selected>2</option>
    <option>33333</option>
    <option>44444</option>
</select>

我知道我可以有按钮或区域,我可以单击以清除整个内容,但我正在努力做到这一点,以便如果您单击选定的选项,它会取消选择它

编辑:CTRL+Click 不是我想要的。它必须只用鼠标

【问题讨论】:

  • 就目前而言,如果您Ctrl+click,浏览器已经可以取消选择它。
  • 您的编辑:CTRL+Click 不是我想要的。它只能用鼠标令人困惑。它是一个多选框,用户将使用 ctrl 来选择多个项目。
  • 可能,用户可以点击拖动选择多个选项...
  • 这很烦人,没有真正的解决方案! @code5788441441 是正确的,这是一个糟糕的用户界面,它强制键盘交互只是为了选择多个项目。手机呢?可访问性呢?

标签: javascript jquery html


【解决方案1】:

可能是一种解决方法:

SEE DEMO

$('select option').on('mousedown', function (e) {
    this.selected = !this.selected;
    e.preventDefault();
});

编辑:这不适用于 IE(版本???)。对于跨浏览器解决方案,即使是丑陋的,请尝试:https://stackoverflow.com/a/21797607/1414562

【讨论】:

  • 选项值很多时无法正常工作,点击时出现滚动问题。
【解决方案2】:

这可能有点骇人听闻,但它确实有效。演示:http://jsfiddle.net/tymeJV/JRgdv/1/

var currentSelect = $("select option:selected").index();

$("select option").click(function() {
    if ($(this).index() == currentSelect) {
        $(this).prop("selected", false);
        currentSelect = -1;
    } else {
        currentSelect = $(this).index();
    }
});

【讨论】:

  • 如果最初突出显示了多个选项,则不起作用。
  • @j08691 -- 有没有办法有效地解决这个问题......我现在真正想到的是创建一个数组,将选定的值推送到它......点击,搜索数组,如果找到值,弹出它,删除选定的值。
猜你喜欢
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 2021-02-09
  • 2014-05-06
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
  • 2018-06-29
相关资源
最近更新 更多