Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用两次JQM pagebeforeshow事件_Javascript_Jquery_Jquery Mobile - Fatal编程技术网

Javascript 调用两次JQM pagebeforeshow事件

Javascript 调用两次JQM pagebeforeshow事件,javascript,jquery,jquery-mobile,Javascript,Jquery,Jquery Mobile,举一个很小的例子来说明我对jquerymobile的问题: 正如您在控制台日志中看到的: pagebeforeshow-页面索引(索引):45 onDeviceReady:function()(索引):39 pagebeforeshow-页面索引(索引):45 ondevicerady:function() pagebeforeshow发生了两次,我花了很多时间试图找出原因!?!我是傻瓜还是jqm bug?Firefox对我来说很好。在webkit浏览器上,尝试删除changeHash选项。

举一个很小的例子来说明我对jquerymobile的问题:

正如您在控制台日志中看到的:

pagebeforeshow-页面索引(索引):45
onDeviceReady:function()(索引):39
pagebeforeshow-页面索引(索引):45
ondevicerady:function()


pagebeforeshow发生了两次,我花了很多时间试图找出原因!?!我是傻瓜还是jqm bug?

Firefox对我来说很好。在webkit浏览器上,尝试删除
changeHash
选项。

当启动并显示第一页时,
数据url
保存在
$.mobile.UrlHistory
中,作为基本url,不带哈希标记。例如,第一个页面的URL是
www.stackoverflow.com/index.html
,其他页面的ID标签是
www.stackoverflow.com/index.html#pageLogin
,依此类推

当您在禁用了
changeHash
的情况下从主页移动到另一个页面时,jQuery移动导航会使用
www.stackoverflow.com/index.html
而不是
www.stackoverflow.com/index.html#pageLogin
更新URL栏,因此,它会再次触发页面事件

如果您仍然希望禁用
changeHash
并避免多个evnet触发,则需要在jQuery Mobile初始化后禁用(
mobileinit
事件)


$(文档).on(“mobileinit”,函数(){
$.mobile.hashListengEnabled=false;
});


您使用的是
changePage()
,事件被调用两次,第一页调用一次,然后当您更改该页时,是的,我使用changePage(),如果我理解正确,则应该在显示之前为每个页调用一次。在我的例子中,我只为第一页设置了pagebeforeshow事件。为什么会发生第二次?我的坏消息,你是对的,应该只被解雇一次,因为我读到它可能是一个修复,使用导航()而不是不推荐的方法changePage():很抱歉,我不知道jquery mobileall@A.Wolff如果他使用的是jQM 1.3,他可以使用jQM 1.4中不推荐的
changePage
,您能详细说明您的答案吗?为什么
changeHash
会“修复”这个问题?酷!拯救了我的一天,伙计们!
<head>
  <link rel="stylesheet" href="jquery.mobile-1.3.2.min.css" />
  <script src="jquery-1.9.1.min.js"></script>
  <script>
    $(document).on("mobileinit", function() {
        $.mobile.hashListeningEnabled = false;
    });
  </script>
  <script src="jquery.mobile-1.3.2.min.js"></script>
</head>