对于JQM中的外部链接,动态添加的链接上的触发器('click')不会传播

trigger('click') on a dynamically added link does not propagate for external links in JQM

本文关键字:链接 传播 click 外部 JQM 动态 对于 添加 触发器      更新时间:2024-06-14

我正试图在导航栏中使用jQuery Mobile的选择菜单作为导航工具。它将需要处理内部和外部链接。绑定到change使得能够使用$.mobile.selectmenu()小部件来获取所选链接,该链接是用URL和位置状态的自定义数据位构建的。然后将链接动态地附加到文档中,并调用.trigger('click')

http://jsfiddle.net/wZNMz/

无论绑定事件、返回值、事件传播争用和属性的排列如何,外部链接都不会起作用。内部链接运行良好。

引用jquery.mobile.navigation.js源触发单击应按预期工作,假设[rel='external']匹配以启用默认URL处理。请注意,该插件在init上从<option>标签中删除了链接,这需要添加链接和触发点击<select>更改的所有技巧。

肮脏而明显的黑客行为是在外部设置window.location并完成。这确实有效,但我不明白为什么有必要采取这种做法。任何想法或见解都将不胜感激!

创建一个链接并触发点击它似乎比使用window.location(出于这个特定原因)将用户转发到一个新页面要麻烦得多。对于内部链接,您可以通过$.mobile.changePage()路由请求。这里有一个例子:

$('#mobile-nav').bind('change', function(e) {
    var nav_to = $(this).selectmenu('selected');
    if (nav_to.data('locality') === false) {
        //this is external, so use window.location
        window.location = nav_to.data('item-url');
    } else {
        //this is internal, so use $.mobile.changePage()
        $.mobile.changePage(nav_to.data('item-url'), {
            //here you can set options such as transition type and direction
        });
    }
});

以下是$.mobile.changePage()的文档:http://jquerymobile.com/demos/1.1.1/docs/api/methods.html