【问题标题】:why is hashchange firing twice in Jquery Mobile backwards transitions?为什么在 Jquery Mobile 向后转换中 hashchange 会触发两次?
【发布时间】:2012-05-07 06:50:54
【问题描述】:

我迷路了....我正在尝试在 pagebeforechange 上重定向 Jquery Mobile 转换 - 根据 JQM docs

这应该适用于向前和向后的转换。虽然从技术上讲,我在向后过渡时遇到了问题。第一个有效,之后每次后退btn点击我得到2+向后过渡。

我已经排除了 URL(现在只传递完整路径与路径和对象(如 $('#page') );不是这样。现在我正在寻找另一个罪魁祸首,但不能找到它。

也许其他人看到了什么或者可以给我一个提示。感谢您的浏览:

使用 cmets 的简要设置:

 // hashchange listener - just to see when hashchange fires
 $(window).on('hashchange', function(e, data){
     console.log("hashchange detected" );
     });

 // re-router
 $(document).on("pagebeforechange", function (e, data) {

       // block multiple events
       if(data.options.fromHashChange == true) {
           if(self.options.$blockMultiPbc == true) {
           console.log("blocked 1");
           self.options.$blockMultiPbc = false;
           return;
           }
        }

       // block $('#page') page-calls (triggered from trailing hashchange
       if(typeof data.toPage !== 'string') {
           console.log("blocked 2");
           return;
           }

        // redirect
       if(data.options.fromHashChange == true) {
            console.log("executing");
            // for hashchanges
            self.panelHash(e, data);
            } else {
                // for changepages
                self.panelTrans(e, data);
                } 
        });

       // panelHash function - here I reconfig data.options to redirect
       panelHash: function( e, data ) {

          // block multiple pagebeforechanges
          self.options.$blockMultiPbc = true;

          if ( some condition ) {
             console.log("MULTIVIEW");
             // tweak changepage options
             data.toPage = ...newULR (not $('object'))
             data.options.fromPage = ...new fromPage
             data.options.changeHash = true;
             data.options.reverse = true;
             console.log( newURL );
             } else {
                // JQM does this
                }
           }

这是一个示例页面:sample

要重现点击page2 menupage3 menu,清除控制台,点击浏览器返回一次,检查控制台(SINGLE RUN),再次点击浏览器返回,检查控制台(两次运行...)

问题
我不是在寻找解决方案 - 只是关于可能导致第二次向后转换触发两次的一些想法。

感谢您的一些想法!

编辑
我在 sript 中添加的控制台越多,就越明显,第二次不需要的 hashchange 会在短暂的延迟后出现。我首先认为它与 JQM 的 fake_onhashchange 事件有关,但完全删除它并没有解决问题。继续寻找。

EDIT2 - 找到了一个 issue on Github - 所以这不是我的脚本......唷......仍然欢迎提示:-)

【问题讨论】:

    标签: jquery events jquery-mobile navigation hashchange


    【解决方案1】:

    好的。我想我找到了。这是 pushstate 处理程序中的错误。

    详细信息和可能的修复on Github

    【讨论】:

      猜你喜欢
      • 2011-01-27
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多