knockout.js
行を選択する機能を備えた単純なテーブル(を使用)があります
http://jsfiddle.net/aDahT/447/
次の機能を追加したいと思います。レコードの名前の最初の文字のキーを押して行を選択します。
たとえば、ユーザーが押すb
と、レコードbbb
が選択されます。
ユーザーが押すh
と、レコードHam
が選択されます。
どうすれば実装できますか?
knockout.js
行を選択する機能を備えた単純なテーブル(を使用)があります
http://jsfiddle.net/aDahT/447/
次の機能を追加したいと思います。レコードの名前の最初の文字のキーを押して行を選択します。
たとえば、ユーザーが押すb
と、レコードbbb
が選択されます。
ユーザーが押すh
と、レコードHam
が選択されます。
どうすれば実装できますか?
まず、フィドルをフォークする場合は、まず JSLint を実行します。よりクリーンで正確なコードを作成するのに役立ちます。私はこれを思いつきました: http://jsfiddle.net/a0viedo/Guf3u/。
event.timeStamp
内部ハンドラーを使用keyPress()
すると、ユーザーが入力しているかどうか、または新しい単語の入力を開始しているかどうかを判断できます。
(そうではない)小さな詳細に注意してください:
良いアイデアが得られることを願っています。
ここに解決策があります:http://jsfiddle.net/VEnsz/4/
外側の要素にバインドされたデータがあります。
<div style="width: 30em; max-height: 6em; overflow-x: hidden; overflow-y: auto; border: 1px groove grey" data-bind="event: {keypress: selectByKeyPress }">
(アプリケーション内の別の要素を選択して、キー プレス イベントをアタッチすることができます)。
...そして、次の関数をモデルに追加しました:
self.selectByKeyPress = function(data, e)
{
var key = String.fromCharCode(e.keyCode).toLowerCase();
var items = self.allItems();
for (var j=0; j<items.length; j++) {
if (items[j].toLowerCase().indexOf(key) == 0) {
self.selectCurrent(items[j]);
return;
}
}
}
このソリューションを多少改良する必要があるかもしれませんが、「ノックアウト」の方法に沿ったものであると感じているため、機能を構築するための優れた基盤を提供してくれることを願っています.