有沒有辦法讓jQuery Autosuggest插件限制用戶只能實際添加搜索結果中包含的選擇項,但不是新的 ?如何強制Autosuggest限制添加到搜索結果
我的意思是如果我輸入「joh」而列表只顯示「John」,那麼我不應該能夠將「Johnny」添加到所選項目中。我正在使用wuyuntao的版本。 您應該檢查出hlsolutions' one。
有沒有辦法讓jQuery Autosuggest插件限制用戶只能實際添加搜索結果中包含的選擇項,但不是新的 ?如何強制Autosuggest限制添加到搜索結果
我的意思是如果我輸入「joh」而列表只顯示「John」,那麼我不應該能夠將「Johnny」添加到所選項目中。我正在使用wuyuntao的版本。 您應該檢查出hlsolutions' one。
我想我設法做到了,但是這基本上是恢復Autosuggests在選擇某個項目時所做的一切。
一下添加到選項哈希:
selectionAdded: function(elem) {
var in_the_result_list = $.grep($('.as-results .as-list .as-result-item'), function(item) { return $(item).text() === elem.textNotChild() }).length;
if (!in_the_result_list) {
elem.remove();
$('.as-input').html(elem.textNotChild());
$('.as-values').val(function(i, current_value) {
return current_value.replace(elem.textNotChild(), '');
});
}
}
也許有更好的方法來做到這一點?我使用自定義jquery方法來獲取沒有「x」的元素的文本,隨時以您想要的方式實現這一點。以下是您需要的方法:
(function ($) {
function elementText(el, separator) {
var textContents = [];
for(var chld = el.firstChild; chld; chld = chld.nextSibling) {
if (chld.nodeType == 3) {
textContents.push(chld.nodeValue);
}
}
return textContents.join(separator);
}
$.fn.textNotChild = function(elementSeparator, nodeSeparator) {
if (arguments.length<2){nodeSeparator="";}
if (arguments.length<1){elementSeparator="";}
return $.map(this, function(el) {
return elementText(el,nodeSeparator);
}).join(elementSeparator);
}
} (jQuery));
事實證明,有一個更好和保持版本的autosuggest插件已具有此功能。看看這個:https://github.com/hlsolutions/jquery-autosuggest
從舊移植到新的沒有痛苦。這與替換JS文件一樣簡單。