需要检测jQuery是否在普通或多选组合框中被触发

时间:2017-11-17 18:50:39

标签: javascript jquery multi-select

我有一些jQuery代码,允许我在多选组合框中选择多个条目,而无需按Ctrl键。

这样做有效,但会影响正常的选择框,现在无法使用鼠标进行更改。

原始的jQuery代码是:

(function ($) {
$(document).ready(function () {
    $("option").mousedown(function(e) {
      this.selected = ! this.selected;
      e.preventDefault();
      return false;
    });
});
})(jQuery);

当然,$("选项")选择器也适用于普通选择框,这就是它失败的原因。

我试图检测事件是否由带有"倍数"的选择框触发。属性,但无法弄清楚如何。以下因各种原因而无法工作,其中一个原因是事件是由选项触发的,而不是选择:

(function ($) {
$(document).ready(function () {
    $("option").mousedown(function(e) {
        if($(this).attr('multiple','multiple')) {
          this.selected = ! this.selected;
          e.preventDefault();
          return false;
        }
        else {
          return true;
        }
    });
});
})(jQuery);

关于如何做到这一点的任何想法?

啊,我不想包含多选的ID,因为在我的真实案例中,另一个多选也使用相同的代码。

这是一个小提琴: https://jsfiddle.net/mheumann/3zn76mex/

2 个答案:

答案 0 :(得分:2)

将要应用此行为的所有多选元素赋予新的CSS类 - 也许custom-multiselect

然后你可以在你拥有的代码中使用像.custom-multiselect option这样的复合选择器......

(function ($) {
  $(document).ready(function () {
    $(".custom-multiselect option").mousedown(function(e) {
      this.selected = ! this.selected;
      e.preventDefault();
      return false;
    });
  });
})(jQuery);

答案 1 :(得分:1)

您可以使用此选择器定位每个多选的选项:$('select[multiple] option')

此选择器定位<option>内出现<select>属性的每个multiple