Update JSON on every keyup for twitter typeahead

后端 未结 2 1893
别那么骄傲
别那么骄傲 2020-12-06 23:23

I have a html page with an input field. Every time something is typed in this field, there is a call done to a php script with jQuery.

This php script returns a JSON

2条回答
  •  时光说笑
    2020-12-06 23:59

    Edit, Updated

    Try

        var substringMatcher = function () {
            return function findmatches(q, cb) {
                var matches, substrRegex;
    
                // an array that will be populated with substring matches
                matches = [];
    
                // regex used to determine if a string contains the substring `q`
                substrRegex = new RegExp(q, 'i');
    
                // iterate through the pool of strings and for any string that
                // contains the substring `q`, add it to the `matches` array
    
                // do ajax stuff
                // update remote `source` here
                $.post("/echo/json/"
                      // do stuff with `q` : `input`
                    , {json:JSON.stringify([states, {input:q}])})
                .then(function(json) {
                    var names  = json[1];
                    console.log(names);
                $.each(json[0], function (i, str) {
                    if (substrRegex.test(str)) {
                        // the typeahead jQuery plugin expects suggestions to a
                        // JavaScript object, refer to typeahead docs for more info
                        matches.push({
                            value: str
                        });
                    }
                  });
    
                cb(matches);
                } // `error` handler
                , function(jqxhr, textStatus, errorThrown) {
                    console.log(textStatus, errorThrown)
                }); // end of `then`
            };
    
        };
    
    var states = ['Alabama', 'Alaska', 'Arizona', 'Arkansas'
                     , 'California','Colorado', 'Connecticut', 'Delaware'
                     , 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois'
                     , 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana'
                     , 'Maine', 'Maryland', 'Massachusetts', 'Michigan'
                     , 'Minnesota', 'Mississippi', 'Missouri', 'Montana'
                     , 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey'
                     , 'New Mexico', 'New York', 'North Carolina', 'North Dakota'
                     , 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island'
                     , 'South Carolina', 'South Dakota', 'Tennessee', 'Texas'
                     , 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia'
                     , 'Wisconsin', 'Wyoming'];
    
        $('#the-basics .typeahead').typeahead({
            hint: true,
            highlight: true,
            minLength: 1
        }, {
            name: 'categories',
            displayKey: 'value',
            source: substringMatcher()
        });
    

    jsfiddle http://jsfiddle.net/guest271314/96d5mzr8/16/

提交回复
热议问题