オートコンプリート機能を必要とするいくつかのフォームフィールドを備えたjQueryMobileアプリケーションに取り組んでいます。 jQueryUiオートコンプリートプラグインを使用していますが、正しく機能しません。フォームがブラウザに読み込まれる最初のページである場合は正常に機能しますが、後でjQueryMobileajax読み込みメカニズムを介してフォームが読み込まれる場合は機能しません。
私が使用しているバージョンは次のとおりです。
jQueryMobile:1.0a4.1
jQueryUi:1.8.9
jQuery:1.4.4
私のオートコンプリート機能は次のようになります。
$(function () {
$('#search').autocomplete({
source: '/Autocomplete/SearchAutoComplete',
minLength: 3,
select: function (event, ui) { }
});
});
私の考えでは、これは現在アクティブなページに接続する必要があると思いますが、これを行う方法がわかりません。誰かがこれを達成する方法を教えてもらえますか?
また、私はjQueryUiオートコンプリートソリューションに縛られていません。これを行うためのより良い方法がある場合は、私に知らせてください。
ありがとう、
グレッグ
JQuery Mobileがかなり成熟し、1.0リリースに近づいているので、これを正しく機能させるためにもう一度挑戦することにしました。私は大成功を収めたので、ここで解決策を共有したいと思います。
現在使用しているバージョンは次のとおりです(2012年2月1日現在)。
jQuery Mobile 1.0.1
jQuery 1.6.4
jQuery UI 1.8.12
スクリプトが参照される順序は重要です。 jQuery、jQuery UI、jQuery Mobile、最後にカスタムスクリプトファイルである必要があります。私のページの頭は次のようになります。
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1" />
<title>My jQM App</title>
<link rel="stylesheet" href="http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.0.1/jquery.mobile-1.0.1.min.css" />
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.6.4.min.js" type="text/javascript"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.12/jquery-ui.min.js" type="text/javascript"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.0.1/jquery.mobile-1.0.1.min.js" type="text/javascript"></script>
<script src="/Scripts/script.js" type="text/javascript"></script>
<link rel="stylesheet" href="/Content/style.css" />
</head>
すべてのオートコンプリートコードは、個別の.jsファイルにあり、最後にリンクされたファイルである必要があります。このサンプルでは、私のものはscript.jsです。
次に、すべてのページdiv(data-role = 'page')にもIDが設定されていることを確認します。たとえば、私の検索ページには
<div data-role="page" id="searchPage">
すべてのページdivにIDが設定されたので、そのdivのjQuery Mobilepagecreateイベントにバインドできます。標準のjQueryページでは、オートコンプリート用に次のようなものがあります。
$('#search').autocomplete({
source: '/Autocomplete/SearchAutoComplete',
minLength: 3,
select: function (event, ui) { }
});
同等のことを行うが、特定のページdivに接続するには、次のようになります。
$('#searchPage').live('pageinit', function (event) {
$('#search').autocomplete({
source: '/Autocomplete/SearchAutoComplete',
minLength: 3,
select: function (event, ui) { }
});
});
これは私にとってこれまでうまく機能してきました。回避策として設定したほとんどのdata-ajax = "false"属性を取り除くことができました。これにより、アプリケーションのパフォーマンスが向上しました。 jQueryUIとjQueryMobileの間で徹底的な互換性テストを行ったわけではないため、マイレージは異なる場合があります。この方法で問題が発生した場合は、ここにコメントを残してください。幸運を。
将来の参考のために、私は最近、jQueryMobileで使用するために特別に作成されたオートコンプリートプラグインをリリースしました。
私はたくさんの検索をしました。 jQuery UIのオートコンプリートは、入力テキストボックスを変更するための一種の機能です。 jQuery Mobileのフィルター検索ボックスは自動競合をシミュレートしますが、実際のデータ収集フォームでの使用にはあまり役立ちませんでした。
この記事でjQueryUIオートコンプリートの使用を開始しましたが、フォーマットの問題が発生し続けました。私は自分のajaxのみ(現時点では)オートコンプリートを作成することになり、それを共有すると思いました。ソースは、適切と思われるように微調整するためにあります。たぶん誰かがそれを受け取って改善するか、そのまま使用することができます。
http://schworak.com/blog/e75/jquery-mobile---autocomplete-text-input/
$('div').live('pagebeforecreate',function(event,ui){
// do something in jquery
});
jQuery Mobileにオートコンプリートが追加され、結果がリストビューに入力されます。彼らの デモページ には、ローカルデータとリモートデータの両方について、それを実装する方法に関する優れた例があります。
最近、依存関係がゼロのオートコンプリートコンポーネントをリリースしました。 (jQueryなし)
これは、Android、iOSなどのほとんどのモバイルブラウザを完全にサポートします。
あなたのケースに当てはまるかどうかはわかりませんが、回避策はdata-ajax = "false"属性を追加してページを防ぐことです。 ajaxによってロードされます。
http://jquerymobile.com/demos/1.0a4.1/#docs/pages/link-formats.html