event.preventDefault()不取消jQuery Mobile中的链接方向

mic*_*lli 2 javascript jquery event-handling jquery-mobile

背景
我一直在努力解决这个愚蠢的小问题,即在jQuery Mobile应用程序中的锚元素上触发click事件时尝试取消链接方向.

假设我有一个简单的多页文档,如下所示:

<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 -->
Run Code Online (Sandbox Code Playgroud)

......和这样的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));
Run Code Online (Sandbox Code Playgroud)

问题
我无法弄清楚为什么event.preventDefault()不取消页面转换.但是,如果我添加event.stopPropagation()它将取消它.此外,如果我从应用程序中删除jQuery Mobile库,它没有event.stopPropagation().

问题
这是正常的行为,是否可以在处理程序中同时调用它们以取消链接方向?

注意
我只使用jQuery Mobile的多页模板,导航和转换功能.

其他问题
的背后潜伏着我原来的问题,问题种类是"什么jQuery Mobile的确实给拦截event.preventDefault()方法的链接阻止链接的默认操作,即要到目标页面.?"

Jon*_*son 6

正常?是.好的,可以同时打电话 是.
event.preventDefault()是唯一可以阻止浏览器默认行为event.stopPropagation()的工具,也是防止竞争事件处理程序触发的唯一工具.

如果你想要一个单行,你可以return false用来达到相同的效果.来自http://api.jquery.com/on/:

从事件处理程序返回false将自动调用event.stopPropagation()和event.preventDefault().也可以为处理程序传递false值,作为function(){return false;的简写; }.所以,$("a.disabled").on("click",false); 将事件处理程序附加到具有"禁用"类的所有链接,以防止它们在单击时被跟踪,并且还可以阻止事件冒泡.