ホームページ >ウェブフロントエンド >jsチュートリアル >jQuery.autocomplete は中国語入力 (Firefox) の修正をサポートします。

jQuery.autocomplete は中国語入力 (Firefox) の修正をサポートします。

WBOY
WBOYオリジナル
2016-05-16 18:09:411079ブラウズ

しかし、唯一残念なのは、中国語の入力方法がオンになっている場合、Firefox3.0 は自動的に中国語のピンインを照合しますが、私の IE6.0 ではそのような問題は発生しません。

原因分析:
オートコンプリート プラグインは、「keydown」イベント (IE6 では入力が分析される場合、jquery.autocomplete.js の 92 行目) を通じてユーザー入力文字の自動一致をトリガーします。有効にすると、入力された文字は「キーダウン」をトリガーしません。これは、中国語入力が完了した後にのみトリガーされるため、Firefox3.0 では中国語入力とラテン語入力に違いはありません。入力メソッドがオンになっているかどうかに応じて、キーダウン「キーダウン」イベントがトリガーされるため、中国語の入力が完了すると、入力したばかりの中国語のピンイン文字の一部が自動的に照合されます。 ------つまり、Firefox だけが問題を抱えているということですね。

解決策:
インターネットで見つかった最も一般的な方法は、jquery.autocomplete.js の 92 行目を変更して「keydown」を「keyup」に置き換えることですが、これは根本的な解決策ではありません。この変更後、Firefox では入力された中国語がタイムリーに自動的に照合されますが、たとえば、この変更後、元のプラグインのキャリッジ リターンやタブなどの重要なイベント メカニズムが破壊されます。入力がフォーム内にある場合、改行は元のものから変更されます。 選択した項目を入力に入力すると、フォームが直接送信されることになり、これは私たちが望んでいることではありません。

私のメソッドの原理は、元のプラグインがクエリをトリガーするイベントを追加することです。つまり、入力フィールドの文字が変更されたときに、クエリが再クエリされます (内部の onChange を呼び出します)。私たちのシステムは IE と Firefox からアクセスされることが多いため、これは主に Firefox 用です。 Firefox には oninput と呼ばれる入力変更イベントがあるため、元の jquery.autocomplete.js の 199 行目に次のコード を挿入するだけで済みます。
.bind("input", function( ) {
// @hack:Firefox での中国語入力のサポート
onChange(0, true)
});


挿入後、は次のとおりです:

...
...
jQueryinput.unbind();
jQuery(input.form).unbind(".autocomplete"); 🎜>}).bind("input", function() {
// @hack:Firefox での中国語入力のサポート
onChange(0, true);
}); ..


2. 複数の Enter 選択をサポートします:
行 91 を変更します:
// 押している間、Opera のみが複数回キーダウンをトリガーしません。他のものは機能しません。
$input.bind(($.browser.opera ? "keypress" : "keydown") ".autocomplete", function(event) {
次のように変更します:
// opera のみmozilla はキーが押されている間複数回キーダウンをトリガーしませんが、他のものはキープレスでまったく機能しません
$input.bind((($.browser.opera || $.browser.mozilla) ? "keypress" : "keydown ") " .autocomplete", function(event) {

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。