Kendo AutoComplete组件search()方法无法强制触发搜索问题求助
解决Kendo AutoComplete点击按钮强制搜索(绕过minLength限制)的问题
我之前也碰到过一模一样的问题,当设置了minLength且开启serverFiltering时,手动调用search()方法确实不会触发搜索——因为Kendo AutoComplete的search()方法内部会先校验输入内容的长度是否满足minLength的要求,不满足的话就会直接跳过远程请求的逻辑。
下面给你两个可行的解决方案:
方案1:临时修改minLength后恢复
这种方法是临时绕过组件的minLength校验,调用搜索后再还原配置:
$('#btnSearchPatients').on('click', function () { var autoComplete = $('#txtPatientSearch').data('kendoAutoComplete'); // 保存原来的minLength配置 var originalMinLength = autoComplete.options.minLength; // 临时将minLength设为0,绕过校验 autoComplete.setOptions({ minLength: 0 }); // 执行搜索(用当前输入的值) autoComplete.search(autoComplete.value()); // 恢复原来的minLength设置 autoComplete.setOptions({ minLength: originalMinLength }); });
方案2:直接触发数据源的read操作(更推荐)
这种方法跳过组件的校验逻辑,直接调用数据源的read()方法,手动传递搜索参数,还能顺便控制下拉菜单的显示:
$('#btnSearchPatients').on('click', function () { var autoComplete = $('#txtPatientSearch').data('kendoAutoComplete'); var searchTerm = autoComplete.value(); // 直接触发数据源的远程读取,传入所需参数 autoComplete.dataSource.read({ searchTerm: searchTerm, patientListId: Filters.getSelectedPatientList().value }); // 如果需要显示下拉菜单展示搜索结果,调用open方法 autoComplete.open(); });
为什么原来的代码不生效?
Kendo UI AutoComplete的search()方法内部有一个隐式校验:当serverFiltering为true时,它会检查当前输入的文本长度是否达到minLength设定的值。如果没达到,就不会发起远程请求,哪怕你手动传入了搜索关键词。这就是你调用search()后没有反应的核心原因。
你可以根据自己的需求选择上面的方案,方案2更直接,不需要修改组件配置,适合这种强制触发搜索的场景。
内容的提问来源于stack exchange,提问作者Anna Kegley
相关产品推荐
相关产品推荐

