我有一个简单的登录对话框,我在文档加载时弹出:
<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如果我点击在网址中使用此哈希重新加载我得到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。
答案 0 :(得分:5)
您可能没有在“页面”elemenet中使用弹出式HTML。
<div data-role="page"> <!-- popup inside here --> </div>
我发现当我不小心将它放在我需要先调用.popup()来初始化的页面之外时,弹出窗口中的按钮或其他元素永远不会用这种方法初始化。根修复是将弹出窗口放在页面元素中。
答案 1 :(得分:3)
$(document).ready()
。而是使用pageinit
http://jquerymobile.com/demos/1.2.1/docs/api/events.html
$(document).bind('pageinit', function() {
$("#signupPopup").popup('open');
});
答案 2 :(得分:2)
尼古拉,
尝试在调用open方法之前初始化弹出窗口。
$("#signupPopup").popup();
$("#signupPopup").popup('open');