【问题标题】:Can I access the original select2 matcher from within my custom matcher?我可以从我的自定义匹配器中访问原始的 select2 匹配器吗?
【发布时间】:2018-03-17 08:16:16
【问题描述】:

我正在使用select2 JQuery 插件。下拉列表中的第一个选项标记为“所有组织”。当用户搜索某个选项时,我不想在搜索结果中包含第一个“所有组织”选项。

有没有简单的方法可以做到这一点?

如果我看到该选项,该策略似乎是使用自定义匹配器并返回 null。但是,然后我需要编写匹配器的其余部分,这基本上与默认行为相同。我可以从我的自定义匹配器中以某种方式调用原始匹配器吗?

$("select").select2({
    matcher: custMatcher
});

function custMatcher(params, data) {
    if (params.term === "All Organizations") {
        return null;
    }

    // else do regular searching
    // would like to call the original matcher here.
 }

jsfiddle

【问题讨论】:

    标签: javascript jquery jquery-select2


    【解决方案1】:

    我们开始;)

    var defaultMatcher = $.fn.select2.defaults.defaults.matcher;
    function customMatcher(params, data) {
      if (params.term && data.id == "ALL") 
      	return null;
      return defaultMatcher(params, data);
    }
    $("#s").select2({
    	matcher: customMatcher,
    });
    <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet"/>
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
    
    <select id="s">
    <option value="ALL">All Organizations</option>
    <option value="1">Org 1</option>
    </select>

    【讨论】:

    • 谢谢!我想我真的希望有人会说“实际上您不需要客户匹配器,只需在设置时打开此标志即可。”
    • 我认为最好的解决方案是using placeholder,但您要求使用默认匹配器
    • 是的,我看到了,但我不认为我想要占位符。我希望它是一个选项,而不是一个可搜索的选项。
    • 好的。我明白了;)
    猜你喜欢
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 2016-06-28
    • 1970-01-01
    相关资源
    最近更新 更多