【问题标题】:jQuery Mobile 1.3.1 Uncaught Error: cannot call methods on popup prior to initialization; attempted to call method 'open'jQuery Mobile 1.3.1 未捕获错误:无法在初始化之前调用弹出窗口上的方法;试图调用方法“打开”
【发布时间】:2013-04-21 13:07:43
【问题描述】:

我有一个简单的登录对话框,我会在加载文档时弹出:

<div data-role="popup" id="signupPopup" data-theme="a" class="ui-corner-all" data-dismissible="false" data-add-back-btn="true" data-transition="pop">
    <h3 class="centerText">Login</h3>

    <div class="popup">
        <form>              
            <input type="email" name="email" id="email" class="centerText" placeholder="email" data-theme="a"/>
            <input type="text"  name="zip"   id="zip"   class="centerText" placeholder="pass" data-theme="a"/>                  
        </form>
    </div>
</div>

$(document).ready(function(){
    $("#signupPopup").popup('open');
});

这是jsFiddle of the example。现在,在正常加载时弹出窗口没有问题,然后它将 url 哈希更新为http://myurl.com/#&ui-state=dialog,如果我在 url 中单击带有此哈希的重新加载,我会收到 js 错误:Uncaught Error: cannot call methods on popup prior to initialization; attempted to call method 'open'

我试图在 http://view.jquerymobile.com/master/demos/widgets/popup/ 上复制相同的行为

通过将 has 添加到链接中,如下所示:

http://view.jquerymobile.com/master/demos/widgets/popup/#&ui-state=dialog 但我无法复制相同的错误。所以,我想知道是否有人遇到了这个错误以及他/她是如何解决的?顺便说一句,我确实检查了谷歌关于这个错误的所有前 20 个链接,但没有一个有帮助,包括一些来自 SO。另外,值得注意的是,如果我使用 jQuery Mobile 1.2 和 jQuery 1.7.1,我不会收到此错误。

我正在使用 jQuery Mobile 1.3.1 和 jQuery 1.9.1。

【问题讨论】:

    标签: jquery jquery-mobile


    【解决方案1】:

    “页面”元素中可能没有弹出 HTML。

    <div data-role="page"> <!-- popup inside here --> </div>
    

    我发现,当我不小心把它放在需要调用 .popup() 进行初始化的页面之外时,但是弹出窗口中的按钮或其他元素永远不会用这种方法初始化。根本修复是将弹出窗口放在页面元素内。

    【讨论】:

    • 非常感谢!我想补充一点,它不仅仅是任何页面,弹出窗口似乎需要嵌套在您调用该弹出窗口时所在的活动页面中。
    【解决方案2】:

    $(document).ready() 不应在 jQuery Mobile 中使用。而是使用pageinit

    http://jquerymobile.com/demos/1.2.1/docs/api/events.html

    $(document).bind('pageinit', function() {
        $("#signupPopup").popup('open');
    });
    

    【讨论】:

      【解决方案3】:

      尼古拉,

      在调用 open 方法之前尝试初始化弹出窗口。

          $("#signupPopup").popup();
          $("#signupPopup").popup('open');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-16
        • 1970-01-01
        • 1970-01-01
        • 2013-02-10
        • 2017-07-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多