2017-10-05 66 views
0

我正在使用select2 JQuery插件。下拉列表中的第一个选项标记为“所有组织”。当用户搜索选项时,我不想在搜索结果中包含首个“所有组织”选项。我可以在我的自定义匹配器中访问原始的select2匹配器吗?

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

看来,策略将是使用自定义匹配器,如果看到该选项,则返回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

回答

1

在这里,我们走;)

var defaultMatcher = $.fn.select2.defaults.defaults.matcher; 
 
function customMatcher(params, data) { 
 
    if (params.term && data.id == "ALL") 
 
    \t return null; 
 
    return defaultMatcher(params, data); 
 
} 
 
$("#s").select2({ 
 
\t 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>

+0

谢谢!我想我真的希望有人会说“实际上你不需要客户匹配器,只需在设置它时打开这个标志。” – pushkin

+0

我认为最好的解决方案是[使用占位符](https://stackoverflow.com/questions/21413241/how-to-use-placeholder-as-default-value-in-select2-framework),但你要求默认匹配器 – bigless

+0

是的,我看到了,但我不认为我想要一个占位符。我希望它是一个选项,而不是可搜索的选项。 – pushkin

相关问题