背景
私は、jQuery Mobile アプリのアンカー要素でクリック イベントが発生したときに、リンクの方向をキャンセルしようとするこのばかげた小さな問題に苦労してきました。
次のような単純な複数ページのドキュメントがあるとします。
<div data-role="page" id="page-1">
<div data-role="content">
<a href="#page-2" id="mLink">page 2</a>
</div><!-- /content -->
</div><!-- /page -->
<div data-role="page" id="page-2">
<div data-role="content">
</div><!-- /content -->
</div><!-- /page -->
... そして JavaScript は次のようになります:
(function (MyApp, $, undefined) {
'use strict';
// Initializes app
function init() {
$('#mLink').on('click', function (event) {
event.preventDefault();
//event.stopPropagation();
//event.stopImmediatePropagation();
});
}
// jQuery Mobile is ready now -> override defaults
$(document).on("mobileinit", function () {
// Set the default page transition
$.mobile.defaultPageTransition = 'slide';
});
// jQuery Mobile is ready now
$(document).ready(init);
}(window.MyApp = window.MyApp || {}, jQuery));
問題がページ遷移をキャンセルしない
理由がわかりません。event.preventDefault()
ただし、追加event.stopPropagation()
するとキャンセルされます。また、アプリから jQuery Mobile ライブラリを削除すると、.xml がなくても動作しevent.stopPropagation()
ます。
質問
これは通常の動作ですか? リンク方向をキャンセルするためにハンドラーで常に両方を呼び出しても問題ありませんか?
注記
jQuery Mobile は、マルチページ テンプレート、ナビゲーション、およびトランジション機能のためだけに使用しています。
追加の質問
私の最初の質問の種類の背後に潜んでいる質問は、 「リンクのデフォルト アクション、つまりターゲット ページへの移動を妨げないようにするために、 event.preventDefault() メソッドをインターセプトするリンクに対して、jQuery Mobile は何をするのか?」というものでした。