如何显示查询回调数据结果仅从开始

How to show query call back data results only start with

本文关键字:结果 数据 开始 回调 查询 何显示 显示      更新时间:2023-09-26

原始代码

var data = {results: []}
    data.results = result;                            
    query.callback( data);

用于加载数据的原始互联网代码:(开始数据的任何修改)

$("#e5").select2({
    minimumInputLength: 1,
    query: function (query) {
        var data = {results: []}, i, j, s;
        for (i = 1; i < 5; i++) {
            s = "";
            for (j = 0; j < i; j++) {s = s + query.term;}
            data.results.push({id: query.term + i, text: s});
        }
        query.callback(data);
    }
});

匹配器功能:

$("#e17").select2({
      matcher: function(term, text) { return text.toUpperCase().indexOf(term.toUpperCase())==0; }
});

目前我使用这种方式:

      var $elem = $( ".auto{!randomJsIden}" );
        $elem.select2({
        minimumInputLength: 1,
        placeholder: "No value selected",
        allowClear : {!allowClear},
         query: function (query) {
             queryData{!randomJsIden}(query);
        },
             createSearchChoice:function(term, data) {
         if ({!syncManualEntry} == true) {
             return {id:term, text:term};
             }
            },
             matcher: function(term, text) { return text.toUpperCase().indexOf(term.toUpperCase())==0; },
            sortResults: function(results, container, query) {
             if (query.term) {
            return results.sort(function(a, b) {
                if (a.text.length > b.text.length) {
                    return 1;
                } else if (a.text.length < b.text.length) {
                    return -1;
                } else {
                    return 0;
                }
            });
            }
          return results;
             }
            });
------------------------------
------------------------------
 function queryData{!randomJsIden}(query){
           Visualforce.remoting.Manager.invokeAction(
                     '{!$RemoteAction.AutoCompleteV2_Con.getData}','{!sObjVal}','{!labelFieldVar}','{!valueFieldVar}',query.term,
                     function(result, event){
                         //if success
                         if(event.status){ 
                            var data = {results: []}
                            data.results =result;                            
                             query.callback( data);                         
                         }
                         else{
          alert('Invalid Field/Object API Name : '+event.message);
                         }
                     }, 
                      {escape: true}
                );
            }  

目前我正在得到结果,如果我键入字母a,它显示的结果包含a,我想显示以a开头的结果。

更新问题:

 <script>
        var v2{!randomJsIden}
function permute(input, permArr, usedChars) {
    var i, ch;
    for (i = 0; i < input.length; i++) {
        ch = input.splice(i, 1)[0];
        usedChars.push(ch);
        if (input.length === 0) {
            permArr.push(usedChars.slice());
        }
        permute(input, permArr, usedChars);
        input.splice(i, 0, ch);
        usedChars.pop();
    }
    return permArr;
}
        var prevVal{!randomJsIden};
        function autocompleteV2{!randomJsIden}(){
             var v2=this;
             jQuery(function($){ //on document.ready
                    v2.init($)
             });
        }
        autocompleteV2{!randomJsIden}.prototype={
            init : function($){
                       var $elem = $( ".auto{!randomJsIden}" ).select2({
                           minimumInputLength: 3,
                           placeholder: "No value selected",
                           allowClear : {!allowClear},
                           query: function (query) {
                               queryData{!randomJsIden}(query);
                           },
                           createSearchChoice:function(term, data) {
                                if({!syncManualEntry} == true){
                                    return {id:term, text:term};
                                }
                            },
                            matcher: function (term, text) {
        if (term.length === 0) return true;
        texts = text.split(" ");
        allCombinations = permute(texts, [], []);
        for (i in allCombinations) {
            if (allCombinations[i].join(" ").toUpperCase().indexOf(term.toUpperCase()) === 0) {
                return true;
            }
        }
        return false;
    },
    sortResults: function (results, container, query) {
        if (query.term) {
            // use the built in javascript sort function
            return results.sort(function (a, b) {
                if (a.text.length > b.text.length) {
                    return 1;
                } else if (a.text.length < b.text.length) {
                    return -1;
                } else {
                    return 0;
                }
            });
        }
        return results;
    }
                       });
                       $elem.on("select2-selecting", function(e) {
                           $('.hiddenField{!randomJsIden}').val(e.val);
                       });
                       $elem.on("select2-removed", function(e) {
                           $('.hiddenField{!randomJsIden}').val('');
                       });

                       if('{!cacheField}' !=''){
                           $elem.select2("data", {id: "{!targetFieldVar}", text: "{!cacheField}"})  
                       }  
                    },
            triggerSearch :function(val){
                                if(prevVal{!randomJsIden} != val){
                                    $=jQuery;
                                    prevVal{!randomJsIden} = val;
                                    var select = $('input.auto{!randomJsIden}');          
                                    var search = $('.select2-input')
                                    select.select2('open');
                                    search.val(val);
                                    search.trigger("input");
                                }
                            }
        }


         /*
        *This method queries data according to the passed parameter
        *and populates the combobox accordingly
        ***/    
        function queryData{!randomJsIden}(query){
           Visualforce.remoting.Manager.invokeAction(
                     '{!$RemoteAction.AutoCompleteV2_Con.getData}','{!sObjVal}','{!labelFieldVar}','{!valueFieldVar}',query.term,
                     function(result, event){
                         //if success
                         if(event.status){ 
                             var data = {results: []}
                             data.results = result;                            
                             query.callback( data);                           
                         }
                         else{
                              alert('Invalid Field/Object API Name : '+event.message);
                         }
                     }, 
                      {escape: true}
                );
            }  

    </script>
    <apex:inputText style="{!Style}" id="hiddeninput" styleClass="auto{!randomJsIden}" value="{!cacheField}" />
    <apex:outputPanel id="hiddenPanel">
        <apex:inputText value="{!targetField}" id="hiddenField"
            styleClass="hiddenField{!randomJsIden}" style="display:none"/>
    </apex:outputPanel>
    <script>v2{!randomJsIden} = new autocompleteV2{!randomJsIden}({});</script>
</apex:component>

仍然无法获得结果。我使用的是select2 3.5.4中的最新版本,请帮助我。

请帮帮我。

更新我的问题:

http://jsfiddle.net/Lnf8j/289/

我试验过这种小提琴:

$('#placeSelect').select2({
    width: '100%',
    allowClear: true,
    multiple: true,
    maximumSelectionSize: 1,
    placeholder: "Click here and start typing to search.",
    data: [
            { id: 1, text: "Ford"     },
            { id: 2, text: "Dodge"    },
            { id: 3, text: "Mercedes" },
            { id: 4, text: "Jaguar"   }
          ],
     matcher: function (term, text) {
           if (text.toUpperCase().indexOf(term.toUpperCase()) == 0) {
    return true;
  }
  return false;
}
});

我的成绩不错

如果我通过这个将其更改为数据

   query: function (query) {
    queryData{!randomJsIden}(query);
            },
         (OR)             

 var data = {results: []}
data.results = result;                            
query.callback( data);

我没有取得好成绩这里需要更改一些内容以获得良好的结果

相应地更改匹配器函数,如下所示:

  matcher: function(term, text) { return text.toUpperCase().startsWith(term.toUpperCase()); }

更改匹配器函数(也称为"谓词")以仅测试text中的第一个字符。有几种方法可以做到这一点,但我认为最好的方法是使用正则表达式。正则表达式是一种可以用于字符串的搜索项类型。在这种情况下,您可以使用类似于term = /^a/i:的RegExp

  • /:启动正则表达式
  • ^:此正则表达式仅在文本开头匹配
  • a:如果正则表达式在文本的直接开头看到一个文字字符a(因为我们编写了^),那么它就会成功
  • /:结束正则表达式
  • i:正则表达式在中区分大小写;它可以匹配CCD_ 10或CCD_

如果RegExp对象term与字符串text:匹配,则此函数将返回true

function matcher(term, text) {
    if (text.match(term)) {
        return true;
    } else {
        return false;
    }
}

当然,从那时起,您可以不写return matcher(term, text)),而只写return text.match(term)。但要注意,正结果不仅仅是true值(请参阅String.protype.match的文档)。