解决方法
我想我解决了这两个功能…
为了简化操作,我使用了一个常用的自定义选择器:
$.expr[':'].textEquals = function (a,i,m) { return $(a).text().match("^" + m[3] + "$"); };
其余的代码:
$(function () { $("#tags").autocomplete({ source: '/get_my_data/',change: function (event,ui) { //if the value of the textBox does not match a suggestion,clear its value if ($(".ui-autocomplete li:textEquals('" + $(this).val() + "')").size() == 0) { $(this).val(''); } } }).live('keydown',function (e) { var keyCode = e.keyCode || e.which; //if TAB or RETURN is pressed and the text in the textBox does not match a suggestion,set the value of the textBox to the text of the first suggestion if((keyCode == 9 || keyCode == 13) && ($(".ui-autocomplete li:textEquals('" + $(this).val() + "')").size() == 0)) { $(this).val($(".ui-autocomplete li:visible:first").text()); } }); });
如果您的任何自动填充建议包含regexp使用的任何“特殊”字符,则必须转义自定义选择器中m [3]中的那些字符:
function escape_regexp(text) { return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"); }
并更改自定义选择器:
$.expr[':'].textEquals = function (a,m) { return $(a).text().match("^" + escape_regexp(m[3]) + "$"); };