jQuery UI自动完成:只允许从build议列表中select的值
我正在实现jQuery UI自动完成,并且想知道是否有任何方法只允许从返回的build议结果中进行select,而不是允许将任何值input到文本框中。
我使用这个标签系统非常像这个网站上使用的标签系统,所以我只想让用户从预填充列表中select标签返回到自动完成插件。
我遇到了同样的问题,没有被定义。 得到了解决办法,并添加了toLowerCase
函数,只是为了安全起见。
$('#' + specificInput).autocomplete({ create: function () { $(this).data('ui-autocomplete')._renderItem = function (ul, item) { $(ul).addClass('for_' + specificInput); //usefull for multiple autocomplete fields return $('<li data-id = "' + item.id + '">' + item.value + '</li>').appendTo(ul); }; }, change: function( event, ui ){ var selfInput = $(this); //stores the input field if ( !ui.item ) { var writtenItem = new RegExp("^" + $.ui.autocomplete.escapeRegex($(this).val().toLowerCase()) + "$", "i"), valid = false; $('ul.for_' + specificInput).children("li").each(function() { if($(this).text().toLowerCase().match(writtenItem)) { this.selected = valid = true; selfInput.val($(this).text()); // shows the item's name from the autocomplete selfInput.next('span').text('(Existing)'); selfInput.data('id', $(this).data('id')); return false; } }); if (!valid) { selfInput.next('span').text('(New)'); selfInput.data('id', -1); } } }
你也可以使用这个:
change: function(event,ui){ $(this).val((ui.item ? ui.item.id : "")); }
我所看到的唯一缺点是,即使用户input了可接受项目的全部值,当他们从文本字段移动焦点时,它将删除该值,并且他们将不得不再次执行。 他们能够input一个值的唯一方法是从列表中select它。
不知道这对你是否重要。
我只是修改代码在我的情况下,它的工作
selectFirst: true, change: function (event, ui) { if (ui.item == null){ //here is null if entered value is not match in suggestion list $(this).val((ui.item ? ui.item.id : "")); } }
你可以试试
http://jsfiddle.net/pxfunc/j3AN7/
var validOptions = ["Bold", "Normal", "Default", "100", "200"] previousValue = ""; $('#ac').autocomplete({ autoFocus: true, source: validOptions }).keyup(function() { var isValid = false; for (i in validOptions) { if (validOptions[i].toLowerCase().match(this.value.toLowerCase())) { isValid = true; } } if (!isValid) { this.value = previousValue } else { previousValue = this.value; } });
我是这样解决清单的:
$("#settlement").autocomplete({ source:settlements, change: function( event, ui ) { val = $(this).val(); exists = $.inArray(val,settlements); if (exists<0) { $(this).val(""); return false; } } });
我在drupal 7.38上,只允许从自动完成中的select框input,你只需要删除用户input点,在那里js不再需要它 – 这种情况下,只要search – 结果到达build议 – popup右键那里你可以保存设置:
**this.input.value = ''**
在autocomplete.js的摘录中看到下面的内容…所以我将整个Drupal.jsAC.prototype.found对象复制到我的自定义模块中,并将其添加到所需的表单
$form['#attached']['js'][] = array( 'type' => 'file', 'data' => 'sites/all/modules/<modulname>_autocomplete.js', );
这里是从单行修改的drupal原始misc / autocomplete.js的摘录…
Drupal.jsAC.prototype.found = function (matches) { // If no value in the textfield, do not show the popup. if (!this.input.value.length) { return false; } // === just added one single line below === this.input.value = ''; // Prepare matches.
=切断。 。 。 。 。 。
用简单的jQuery,使用事件focusout
:
例如:
$("#input").focusout(function(){ });
然后:用$( "#input" ).val()
获取文本,并检查该单词是否与数组一致。 如果不清除input: $( "#input" ).val('');