【问题标题】:multi-select box without ctrl-click没有 ctrl-click 的多选框
【发布时间】:2014-10-26 10:53:13
【问题描述】:

我正在使用这篇 stackoverflow 帖子中编写的代码

How to avoid the need for ctrl-click in a multi-select box using Javascript?

在许多其他文章中也建议在不按 ctrl-click 的情况下进行多选。

代码:

$('option').mousedown(function(e) {
    e.preventDefault();
    $(this).prop('selected', !$(this).prop('selected'));
    return false;
});

问题是代码在 FireFox 31.0 上不起作用。 您可以使用以下链接进行尝试

FIDDLE

有没有人知道解决这个问题的方法:)

【问题讨论】:

  • 我是 jqueryui erichynds.com/blog/jquery-ui-multiselect-widget 的多选插件的忠实粉丝,这也将允许人们进行过滤,并有一个“全选”选项
  • 感谢您的评论,其实我最好不使用新库就找到问题:)
  • 您是否尝试过使用鼠标的滚动按钮单击选项? :D 它不需要按下 CTRL
  • 其实这是一个只用鼠标左键的要求:)
  • 我对此进行了测试。没有错误。它只是不起作用。

标签: javascript jquery firefox multi-select


【解决方案1】:

以下代码适用于 firefox 31.0、IE 10 和 crome 36.0.1985.143。但如果也使用 CTRL 键,它就不能很好地工作。

 $('select').bind("click", function (event, target) {

        event.preventDefault();
        var CurrentIndex = event.target.selectedIndex==undefined? $(event.target).index(): event.target.selectedIndex
        var CurrentOption = $("option:eq(" + CurrentIndex+ ")", $(this));
        if ($(CurrentOption).attr('data-selected') == undefined || $(CurrentOption).attr('data-selected') == 'false') {
            $(CurrentOption).attr('data-selected', true);
        }
        else {
            $(CurrentOption).prop('selected', false).attr('data-selected', false);
        }

        $("option", $(this)).not(CurrentOption).each(function (Index, OtherOption) {
            $(OtherOption).prop('selected', ($(OtherOption).attr('data-selected') == 'true') ? true : false);
        });
         return false;
    });

【讨论】:

  • 您可以测试是否按下了 ctrl 或 meta 键。我也相信它是.on 而不再是.bind
  • 感谢您的评论,有一个简单的问题,但我不知道在哪里。如果选择以这样的一些选定选项开始: 现在如果您尝试选择其他选项,它总是会清除已经选定的。
  • @user3584625 我使用了自定义属性 data-selected 来跟踪其状态,因此您还需要维护该属性。因此,当您已选择该选项时,请将属性也设置为 true。
  • 它在 IE 11 中不起作用。无法选择多个值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
相关资源
最近更新 更多