jQuery UI オートコンプリート コンボボックスを使用する場合、リストに基づいて有効なキー エントリのみを強制するオプションがあると思います。無効なキーを許可しないようにして、リストに有効なアイテムのみを入力できるようにする方法はありますか? また、コンボボックスのデフォルト値を設定する方法はありますか?
リストに (C#、Java、Python) がある場合
「abcds . .」と入力し始めることができます。有効なエントリのみを許可する必要があります。
jQuery UI オートコンプリート コンボボックスを使用する場合、リストに基づいて有効なキー エントリのみを強制するオプションがあると思います。無効なキーを許可しないようにして、リストに有効なアイテムのみを入力できるようにする方法はありますか? また、コンボボックスのデフォルト値を設定する方法はありますか?
リストに (C#、Java、Python) がある場合
「abcds . .」と入力し始めることができます。有効なエントリのみを許可する必要があります。
更新 2
Tested on
Internet Explorer 6 and later
Chrome
Firefox
Opera
コア JavaScript コード:
var Tags = ['csharp', 'java', 'python' ];
$("#autocomplete").keypress(function(event) {
//Firefox workaround..
if (!event.which &&
((event.charCode || event.charCode === 0) ? event.charCode: event.keyCode)) {
event.which = event.charCode || event.keyCode;
}
var charCode = String.fromCharCode(event.which).toLowerCase();
var search_val = this.value + charCode;
var x = search_val.length - 1;
var match;
for (var i = 0; i < Tags.length; i++) {
if (charCode == Tags[i][x] && Tags[i].indexOf(search_val) != -1) {
match = true;
}
}
//Backspace functionality added!
if (!match && event.which != 8 ) {
event.preventDefault();
}
});
ノート:
お知らせ下さい!
オートコンプリートを設定した後、このコードを使用してスペース文字と等号文字 (ASCII コード 32 および 61) を防止します。そして、デフォルトを設定します。
$("#myautocompletectrl").keypress(function (e) {
if (e.which == 32 | e.which == 61) {
e.preventDefault();
}
}).val('mydefaultvalue');
キーが押されていないように動作します(あなたが望んでいたように)。
Firefox 3.63 および jQuery UI 1.8 オートコンプリートでテスト済み。
また、jQuery UI 1.8 オートコンプリートに mustMatch 機能を追加で実装したい場合は、こちらをご覧ください: jQuery UI オートコンプリートで "mustMatch" と "selectFirst" を実装する方法?
編集:あなたはすでに私の投稿を読んでコメントしているようです.... :)
あなたの質問は、 jQuery プラグイン フォーラムや、jQuery UI オートコンプリートで「mustMatch」と「selectFirst」を実装する方法で、人々がこの問題について議論している一般的な要求でもあるようです。
この質問に対する受け入れられた答えは機能します。したがって、Doc Hoffidayのソリューションは評判に値します。
あるいは、 Jörn Zaefferer の autocompleteを「mustMatch」オプションで使用することもできます。
<script type="text/javascript">
$(document).ready(function(){
var availableTags = ["csharp", "java", "python"];
$("#tags").autocomplete(availableTags, {
mustMatch: true
});
});
</script>
<input id="tags" />
アップデート
最初は、あなたがコンボボックス ソリューションを望んでいることを見逃していました。それを明確にしてくれてありがとう。
フォーム内で実際に機能させるには、いくつかの変更を加える必要がありました。イベントが正しい順序で発生するように、短い遅延を導入しました。それ以外は、Doc Hoffiday のソリューションを挿入しました。
「変更」イベントを使用しましたが、「閉じる」イベントを使用して何かを機能させることもできます。言いたくないのですが、新しい jQuery UI オートコンプリートを使ったこれまでの経験では、少し信頼性が低いということです。複数のタイプのイベント コールバックが構成されていると、事態が混乱するように見えます。
更新 2
Doc Hoffiday のソリューションに基づいて新しいカスタム セレクターを追加し、入力されたテキストが有効なオプションの先頭に一致したときに上書きされないようにしました。また、ソースが提供するオプションをより完全に一致するように制限するように更新しました。これがあなたの要件に近いことを願っています。
$("#myautocompletectrl").keypress(function (e) {
if (e.which == 32 | e.which == 61) {
e.preventDefault();
}
}).val('mydefaultvalue');
それは私のために働きます...ありがとうございます:D