2016-05-02 13 views
3

私は自分自身の "オートコンプリート"を作成しようとしていますが、文字を入力すると(例えば単語のためのw)、分割の遅延があります。ここでjqueryキーアップに遅延がありますか?

は私のtestcodeです:

CSS:

#txtSearchAutocomplete { 
    background-color: white !important; 
    position: absolute; 
    top: 0; 
    width: 100%; 
    font-size: 20px !important; 
    border: none !important; 
    color: gray; 
} 

#txtSearch { 
    background-color: transparent !important; 
    position: absolute; 
    top: 0; 
    width: 100%; 
    font-size: 20px !important; 
    border: none !important; 
} 

HTML:

<span style="position: relative; display: inline-block; width:100%; top: -18px;"> 
    <input type="text" id="txtSearchAutocomplete" disabled > 
    <input type="text" id="txtSearch"> 
</span> 

JS:

$(document).ready(function($) { 
    $("#txtSearch").focus(); 

    $("#txtSearch").keyup(function(e) { 
    var autocomplete = ['word', 'excel']; 
    var $txtAutocomplete = $("#txtSearchAutocomplete"); 
    var txt = $("#txtSearch").val().trim().toLowerCase(); 

    $txtAutocomplete.val(""); 

    if (txt == "") return; 

    for (i = 0; i < autocomplete.length; i++) { 
     var entry = autocomplete[i]; 
     if (entry.indexOf(txt) == 0) { 
     $txtAutocomplete.val(entry); 
     break; 
     }; 
    }; 
    }); 
}); 

とフィドルサンプル: https://jsfiddle.net/25gwz1qu/1/

文字を入力して削除する場合はもう一度入力してください。少し遅れていることがわかります。遅れがIEでもう少し長いことを縫うかもしれません。

どのようにこの遅延を取り除くことができますか?

おかげ

+0

上の( '入力'、機能(E){...}) ' – Rickkwa

+0

スーパー' $( "#txtSearch")試してみてください - 。トリックをやっています。それを回答として追加すると、回答としてマークすることができます。ありがとう!! :) – MojoDK

+0

ちょうど、この問題は再現できません。それは私のブラウザで速く働いています:) – choz

答えて

1

理由があります。その場合は、oninputが行く方法です。このイベントは、テキストボックス入力が変更されたときにトリガされます。

$("#txtSearch").on('input', function(e) { ... }) 
-1

はこれを試して、ユーザーがキーを行くことができます一度のイベントがトリガされているため、あなたが見ている遅延のため

$(document).ready(function($) { 
    $("#txtSearch").focus(); 

    $("#txtSearch").on('input',function(e) { 
    var autocomplete = ['word', 'excel']; 
    var $txtAutocomplete = $("#txtSearchAutocomplete"); 
    var txt = $("#txtSearch").val().trim().toLowerCase(); 

    $txtAutocomplete.val(""); 

    if (txt == "") return; 

    for (i = 0; i < autocomplete.length; i++) { 
     var entry = autocomplete[i]; 
     if (entry.indexOf(txt) == 0) { 
     $txtAutocomplete.val(entry); 
     break; 
     }; 
    }; 
    }); 
}); 
+1

これはすでにコメントに回答しています。あなたが提案しているアプローチがありますか? – Thangadurai

+0

なぜ、どのように動作するのか説明を追加してください。コードのみの回答は大変です。 – Gogol

+0

いいえ、ほぼ同じ、私はそのコメントを見たことがない、情報のおかげで。 –

1

私はそれらの変更を行なったし、ここで働くFiddleである理由を説明するコメントで私の解決策に見てみてください。 私のマシンでは、オートコンプリートはそれらの変更の後すぐに瞬時に行われます。

enter image description here

$(document).ready(function($) { 
    // i had moved all selectors outside the function so the havy dom selection will happen only once 
    var autocomplete = ['word', 'excel']; 
    var $txtAutocomplete = $("#txtSearchAutocomplete"); 
    var $searchElement = $("#txtSearch"); 
    $searchElement.focus(); 
    // In Jquery on works faster than on key up, cause user lets go of the key. 
    $searchElement.on('input',function(e) { 
    var txt = $searchElement.val().trim().toLowerCase(); 
    // I had replaced the element to be a div and not a input cause the div element is much light weight and faster to draw for the browser 
    $txtAutocomplete.text(""); 
    if (txt == "") 
     return; 
    for (i = 0; i < autocomplete.length; i++) { 
     var entry = autocomplete[i]; 
     if (entry.indexOf(txt) == 0) { 
     $txtAutocomplete.text(entry); 
     break; 
     }; 
    }; 
    }); 
}); 
関連する問題