jQuery UI Autocomplete若干知识点小结
简单示例:
obj.autocomplete({ source: function (request, response) { doAjax("fee/GetPrice", "{'wldm':'" + request.term + "'}", function (data) { response($.parseJSON(data.d).Table); }); }, search: function () { var term = extractLast(this.value); if (term.length < 2) { return false; } }, focus: function () { return false; }, select: function (event, ui) { var terms = ui.item.wldm; this.value = terms; setFieldValue(this, ui.item.bzdj); return false; } }).autocomplete("instance")._renderItem = function (ul, item) { return $('<table width="240px"></table>') .data("item.autocomplete", item) .append('<tr><td style="width:160px;">代码:' + item.wldm + '</td><td style="width:80px;text-align:right">¥' + item.bzdj + '</td></tr>') .appendTo(ul); };
动态生成录入框(采用复制html方式)后,绑定自动完成功能,发现不起作用,发现jquery ui生成的标记(类似:jQuery110200319953157533831)重复(因为是复制的,肯定重复了),jqueryui应该是按照标记,如果遇到相同的标记,让第一个控件起作用了。于是想着怎么去掉这些标记,后来在官网找到destroy方法。调用也简单明了:
obj.autocomplete("destroy");
上述问题解决后,页面功能基本上开发完毕。但测试时遇到一个问题,录入控件需要在不同模式下进行不同的动作。如:模式1下,控件手工输入;模式2下控件需要通过autocomplete远程加载数据。这时候,如果录入控件从手工模式切换到远程调用模式时,调用destroy方法,jqueryUI会报错。
cannot call methods on autocomplete prior to initialization; attempted to call method 'destroy'
于是有了下面的判断方法(来源):
if ($target.hasClass('ui-autocomplete')) { $target.autocomplete('destroy') }
于是,基本上解决了jqueryui autocomplete组件在使用过程中遇到的一些零零碎碎问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~