1

クエリ文字列を変更するために、(ユーザーが何らかのアクションを実行したときに) jQM ページの URL を動的に変更したいと考えています。の使用history.pushStateは正常に機能しますが、jQM が URL にハッシュを追加しようとすると、たとえばダイアログに移動するときに、期待どおりに機能しません: URL は元の値に戻り、jQM はそれにハッシュを追加します (ダイアログを閉じようとするとエラーが発生することに注意してください)。

jQuery Mobile のドキュメントを調べたところ、ページの元の URL が要素のdata-url属性に格納されていることがわかりました。data-role="page"そのため、URL を変更する必要があるときはいつでもそれを変更しようとしましたが、ダイアログを開くと元の URL に戻ります。

例については、この JS Bin を確認してください: http://jsbin.com/egunif/5/edit

[ダイアログ] ボタンをクリックすると、URL が (data-url 属性と共に) 変更され、ダイアログが開きます。egunif/hashtestjQM がURL を に変更する前に、URL が一時的に に変更されていることがわかりますegunif/5#&ui-state=dialog

元の URL は別の場所に保存されているようですが、問題はどこにあるのでしょうか。また、jQM がハッシュを変更したときに競合しないように、この URL を変更することは可能ですか?

ありがとう!

4

1 に答える 1

1

私がやったのは、ページをダイアログに変更するたびに(pagebeforechangeハンドラーで)元の値にURLを設定し、ページに戻ったときに(ハンドラーで)新しい値に再置換することpagechangeでした。

空のハッシュ値が原因でブラウザーのデバッグ コンソールにエラーが表示されますが (おそらくこの問題に関係している可能性があります)、サイトの機能には影響しないので、今はそのままにしておきます。しかし、私はまだより良い提案を受け入れています!

アップデート:

jQM の 1.2.0 最終バージョンでは、ポップアップが導入され、data-history="false"ポップアップに設定してハッシュ変更を無効にするオプションが追加されました。すべてのダイアログをポップアップに置き換えることで、jQM との競合を心配することなく URL を操作できます。

于 2012-08-23T19:02:58.520 に答える