0

私は新しいローカル プロジェクトに取り組んでおり、多くの通りの名前がデータベースに追加されています。オートコンプリート スクリプトを機能させるためにこれらを取得しています。これまでのところすべて問題ありませんが、既存のスクリプトに 2 つの変更を加える必要があります。

1 つ目: 現在のコードで動作するように matcher.slice(0,10) を追加 // 一度に 10 個の提案のみが表示されるようにする 2 つ目: 入力フィールドでの自由な入力をブロックします。したがって、通りの名前がチャカンスカの場合、チャカンスカブラのような新しいエントリをブロックします。jsfiddler の例を以下に追加

<script>
    $(function() {
var names = [ "Čačanska", "Čajetinska", "Čantavirski Put", "Čapajeva", "Čavoljska", "Čede Žice", "Čikerijska", "Đakovska", "Đerđa Dože", "Đerđa Lukača", "Đerda Dože", "Đerdapska", "Đeri Ferenca", "Đevđelijska", "Đorđa Natoševića", "Đorda Natoševica", "Đule Valija", "Đurđinska", "Đurdinska", "Đure Đakovića", "Đure Daničića", "Đure Stantića", "Šabačka", "Šajkaška", "Šamačka", "Šandora Lifke", "Šandora Petefija", "Šantićeva", "Šarplaninska", "Šebešićka", "Šekspirova", "Šenoina", "Šibenska", "Šidska", "Šime Ivića", "Šime Tikvickog", "Šimeta Tikvickog", "Široki Progon" ];

 var accentMap = {
            "š": "s",
            "ć" : "c",
            "č" : "c",
            "ž" : "z",
            "đ" : "d",
            "s" : "š",
            "c" : "č",
            "c" : "ć",
            "z" : "ž",
            "d" : "đ",
            "Š": "S",
            "Ć" : "C",
            "Č" : "C",
            "Ž" : "Z",
            "Đ" : "D",
            "S" : "Š",
            "C" : "Č",
            "C" : "Ć",
            "Z" : "Ž",
            "D" : "Đ"
        };
        var normalize = function( term ) {
            var ret = "";
            for ( var i = 0; i < term.length; i++ ) {
                ret += accentMap[ term.charAt(i) ] || term.charAt(i);
            }
            return ret;
        };

        $( "#addr" ).autocomplete({
            source: function( request, response ) {
                var matcher = new RegExp( $.ui.autocomplete.escapeRegex( request.term ), "i" );
                response( $.grep( names, function( value ) {
                    value = value.label || value.value || value;
                    return matcher.test( value ) || matcher.test( normalize( value ) );
                }));

                }
        });
    });
</script>

最初の一例: http://jsfiddle.net/andrewwhitaker/vqwBP/

2 番目の例: http://jsfiddle.net/prCsm/

基本的に、両方の例を既存のコードに追加したいと思いますが、何をしてもオートコンプリートが機能しなくなります..よろしくお願いします!

4

1 に答える 1

0

私は誰かが私を助けてくれるのを待っているので、私はまだ自分で解決しようとしています...

「一度に10件の結果を表示する」の解決策は次のとおりです

$( "#addr" ).autocomplete({
    source: function( request, response ) {
        var matcher = new RegExp( $.ui.autocomplete.escapeRegex( request.term ), "i" );
        var results = $.grep( names, function( value ) {
            value = value.label || value.value || value;
            return matcher.test( value ) || matcher.test( normalize( value ) );
                       })
            results = results.slice(0,10);
        response( results );
        }
});
于 2012-09-24T15:20:15.917 に答える