【问题标题】:jQuery Mobile changePage failedjQuery Mobile 更改页面失败
【发布时间】:2013-01-18 13:38:02
【问题描述】:

我在使下面的简单脚本工作时遇到问题,但不是:

<div data-role="page" id="targetPage">

    <div data-role="content">
        <form action="" method="" name="targetForm">
            <a id="bt-addTarget" data-role="button" data-icon="plus">Add Target</a>
        </form>
    </div><!-- /content -->

    <div id="addTargetDialog"  data-role="dialog">
        <div data-role="header" data-theme="d">
            <h1>Choose a Target</h1>
        </div>
        <div data-role="content" data-theme="c">
            <form action="" method="" name="addTargetForm">
                <input type="hidden" name="addTarget" value="yes" />
                <select name="target">
                   <option value="test 1">test 1</option>
                   <option value="test 2">test 2</option>
                </select>
                <a id="btn-apply" href="target.php" data-role="button" data-theme="b">Apply</a>       
                <a href="target.php" data-role="button" data-rel="back" data-theme="c">Cancel</a>  
            </form>
        </div>
    </div>

    <script>
        $(document).undelegate("#targetPage", "pageinit").delegate("#targetPage", "pageinit", function() {
                $('form[name="targetForm"] #bt-addTarget').off('click').on('click', function(e){
                        e.preventDefault();
                        $.mobile.changePage("#addTargetDialog");
                });
        });
    </script>   

</div>

$.mobile.changePage("#addTargetDialog");被调用但失败

【问题讨论】:

  • Javascript 控制台说什么?有没有试过在mobileinit事件触发后执行脚本?

标签: javascript jquery css jquery-mobile dialog


【解决方案1】:

您的 data-role="dialog" div 必须与调用它的原始页面处于同一级别:

<div data-role="page" id="targetPage">

    <div data-role="content">
        <form action="" method="" name="targetForm">
            <a id="bt-addTarget" data-role="button" data-icon="plus">Add Target</a>
        </form>
    </div><!-- /content -->
</div>

<div id="addTargetDialog"  data-role="dialog">
    <div data-role="header" data-theme="d">
        <h1>Choose a Target</h1>
    </div>
    <div data-role="content" data-theme="c">
        <form action="" method="" name="addTargetForm">
            <input type="hidden" name="addTarget" value="yes" />
            <select name="target">
               <option value="test 1">test 1</option>
               <option value="test 2">test 2</option>
            </select>
            <a id="btn-apply" href="target.php" data-role="button" data-theme="b">Apply</a>       
            <a href="target.php" data-role="button" data-rel="back" data-theme="c">Cancel</a>  
        </form>
    </div>
</div>

<script>
    $(document).undelegate("#targetPage", "pageinit").delegate("#targetPage", "pageinit", function() {
            $('form[name="targetForm"] #bt-addTarget').off('click').on('click', function(e){
                    e.preventDefault();
                    $.mobile.changePage("#addTargetDialog");
            });
    });
</script>

工作示例:http://jsfiddle.net/Gajotres/M6Gvz/

编辑:

旧的 html 看起来像这样:

<div data-role="page" id="targetPage">
    <div data-role="content">
            ... 
    </div>

    <div id="addTargetDialog"  data-role="dialog">
            ...
    </div><!-- end dialog -->

    <script>
            ...
    </script>   
</div> <!-- end targetPage -->

新的 html 看起来像这样:

<div data-role="page" id="targetPage">
    <div data-role="content">
            ... 
    </div>   
</div><!-- end targetPage -->

<div id="addTargetDialog"  data-role="dialog">
        ...
</div><!-- end dialog -->

<script>
        ...
</script>   

如果您想知道如何在您的页面中实现这一点。

如果您有多个 html 页面,请这样做:

HTML 1

  <div>PAGE 1</div>
  <div>DIALOG 1</div>
  <script>PAGE 1</script>

HTML 2

    <div>PAGE 2</div>

HTML 3

    <div>PAGE 3</div>

如果您有 1 个包含多个页面的 html,请这样做:

HTML 1

    <div>PAGE 1</div>
    <div>PAGE 2</div>
    <div>PAGE 3</div>
    <div>PAGE 4</div>
    <div>PAGE 5</div>
    <div>DIALOG 1</div>
    <script>PAGE 1</script>

【讨论】:

  • 感谢@Gajotres 的帮助! “与原始页面处于同一级别”是什么意思?你能告诉我你改变了什么吗?
  • 谢谢!但问题是当我从另一个页面来到这个页面时,对话框不再显示,因为对话框 div 在页面之外,JQM 没有加载它......
  • 对话框 div 应该始终与页面 div 处于同一级别,无论您有 1 个带有多个页面的 html 还是多个 html。只有 jQM 弹出容器应该在页面 div 内。
  • 那就看看我的EDIT部分吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多