【问题标题】:JQuery Autocomplete clears textbox of previous data?JQuery自动完成清除以前数据的文本框?
【发布时间】:2023-03-17 05:20:01
【问题描述】:

我在文本字段上有一个 jquery 自动完成功能,并且我正在使用一种 hacky 方式来允许在同一个文本框中多次自动完成功能。基本上,您可以用逗号分隔一个值,然后正则表达式匹配器将仅在最终值之后尝试匹配该术语。例如,我可以在文本框中输入 dog、cat、pi,而 jquery 将为 pig 自动完成,因为我只将“pi”传递给自动完成。我的方法的唯一问题是,如果用户点击自动完成功能,那么所有以前的数据(狗、猫)都会消失并被自动完成值“猪”取代。关于如何在不删除以前数据的情况下点击建议的任何想法?

   function filterResults(myList, matcher) {
                    var retGrep = new Array();
                    for (var i = 0; i < myList.length; i++) {
                        if (matcher.test(myList[i])) {
                            retGrep.push(myList[i]);
                        }
                    }
                    return retGrep;
                }
                $("#title").autocomplete({
                    source: function(request, response) {
                        if(request.term.indexOf(',') != -1){
                            var re = $.ui.autocomplete.escapeRegex(request.term.substr(request.term.lastIndexOf(',') + 1));
                        }else{
                            var re = $.ui.autocomplete.escapeRegex(request.term);
                        }
                            var matcher = new RegExp("^" + re, "i");
                            var results = filterResults(titleList, matcher);
                            response(results.slice(0, 5));

                    },
                    messages: {
                        noResults: '',
                        results: function() {}
                    }
                });

【问题讨论】:

  • 能出示相关代码吗?
  • 我贴出来了...没有cmets..来吧....
  • 我们实际上并没有收到编辑更改的警报,因此很容易错过。这就是为什么您要从一开始就确保所有信息都包含在问题中,这样您就可以得到我们最好的帮助。

标签: jquery autocomplete


【解决方案1】:

所以这对您来说是一个修复,无需修改实际插件。

http://jsfiddle.net/w4p6s002/1/

$(document).ready(function(){
    var buffer ="";
    function filterResults(myList, matcher) {
                    var retGrep = new Array();
                    for (var i = 0; i < myList.length; i++) {
                        if (matcher.test(myList[i])) {
                            retGrep.push(myList[i]);
                        }
                    }
                    return retGrep;
                }
                $("#title").autocomplete({
                    source: function(request, response) {
                        if(request.term.indexOf(',') != -1){
                            var re = $.ui.autocomplete.escapeRegex(request.term.substr(request.term.lastIndexOf(',') + 1));
                        }else{
                            var re = $.ui.autocomplete.escapeRegex(request.term);
                        }
                            var matcher = new RegExp("^" + re, "i");
                            var results = filterResults(["taco","pig","help"], matcher);
                            response(results.slice(0, 5));

                    },
                    messages: {
                        noResults: '',
                        results: function() {

                        }
                    },
                    select: function( event, ui ) {
                        buffer = $("#title").val().substring(0,$("#title").val().lastIndexOf(",")+1);
                    }, 
                    close: function( event, ui ) {
                        $(this).val(buffer + $("#title").val());
                    }
                });


});

I added the 2 event listeners in your code so when a selection occurs it saves the string in a buffer before it is changed.然后,当它被更改时,它会在自动完成值之前添加该文本。

【讨论】:

  • 旁注:如果您使用长度超过一个字符的不同分隔符,这将不起作用...您必须稍微修改选择功能。
  • 我的意思是关闭函数。
  • 嗯,是的,但你的例子只是一个逗号。如果分隔符是其他任何东西,这将是一个简单的更改。
  • 是的,我并没有说你的错误,但如果有人碰巧复制粘贴了这段代码,我会提醒他们/
猜你喜欢
  • 2012-07-21
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
相关资源
最近更新 更多