0

我使用Select2进行标记。它就像一个魅力,但我有一个额外的要求:匹配器应该不仅仅匹配项目的文本。

让我解释。该matcher函数有两个参数,termtext。这允许我们比较给定的标签和输入的文本。但是,如果我为每个标签定义附加数据(通过tags函数),我将无法在匹配器中访问它。

示例代码:

// #myinput is a hidden input field
$('#myinput').select2({
  matcher: function(term, text) {
      return text.toUpperCase().indexOf(term.toUpperCase()) >= 0;
  },
  tags: function() {
      var tags = [];
      $('#myselect').find('option').each(function(index, option) {
          option = $(option);
          tags.push({
              id: option.val(),
              text: option.text(),
              category: option.data('category')
          });
      });
      return tags;
  }
})

我为每个标签设置了强制id和属性。text此外,还有一个名为category. 我想匹配文本和类别,而不仅仅是文本。

那可能吗?

4

2 回答 2

1

这目前是不可能的(从 3.3 开始),请在 select2 的 github 问题跟踪器中使用 jsfiddle 提交增强请求。

于 2013-02-11T00:53:10.327 回答
0

使用3.4.2,仍未实现。但是真的很简单。

在 select2.(min).js 行中找到使用 2 个 args 调用 matcher (" e.matcher( ");

在我的版本上,我有这样的东西:

{var a=this.text!==b,c=a?this.text:this;(""===f||e.matcher(f,c) 

将“this”添加到第三个参数

e.matcher(f,c,this);

结果,整个标签对象将被传递:)

于 2014-07-03T09:31:39.160 回答