【问题标题】:JQuery Mobile changepage changes the page than go back to the previous pageJQuery Mobile changepage 更改页面而不是返回上一页
【发布时间】:2015-03-04 17:29:05
【问题描述】:

我正在尝试在弹出式锚点内使用 $.mobile.changePage 更改到另一个页面,但是当我单击弹出式窗口内的锚点时,页面会更改,然后再次返回上一页。

我试过这个解决方案:changePage "jumps" back to old page 使用这个: $(document).bind("mobileinit", function(){ $.mobile.pushStateEnabled = 假; });

但它也不起作用。

这就是我构建页面的方式:

<div id="pgTest" data-role="page" data-theme="a">
    @Html.Partial("_Header", new WebApp.Models.HeaderModel() { Header = "Title" })
    <div data-role="ui-content">
        <div style="width:90%; margin:0 auto;">
            @Html.Partial("_ListViewWithFilter", Model)

            <!--Pop Up-->
            <div data-role="popup" id="popupConfirmacao" data-dismissible="false" data-overlay-theme="a" class="ui-corner-all">
                <div role="main" class="ui-content">
                    <h3 class="ui-title" id="dialogTitle"></h3>
                    <a id="linkConfirmacaoDialog" href="#" class="ui-btn ui-corner-all ui-shadow ui-btn-inline ui-btn-b" data-rel="back">Sim</a>
                    <a href="#" class="ui-btn ui-corner-all ui-shadow ui-btn-inline ui-btn-b" data-rel="back">Não</a>
                </div>
            </div>
            <!--Pop Up ends-->
        </div>
    </div>
    @Html.Partial("_Footer")
</div>

这是我的 JS:

<script type="text/javascript">
        $(function () {
            var itens = $('#ulMusicas>li');
            itens.click(function () {
                var nomeMusica = $(this).find('a').text();
                $('#dialogTitle').text('Add "' + nomeMusica + '"?');
                $('#linkConfirmacaoDialog').click(function () {                    
                    $.mobile.changePage('/Controller2');
                });
                $('#popupConfirmacao').popup('open', { positionTo: 'window', transition: 'pop' });
            });
        });
</script>

它基本上会创建一个列表视图,当您单击任何项​​目时,它会打开一个弹出窗口。如果您单击弹出窗口上的按钮,它应该将您重定向到另一个页面。此时 jquery mobile 将我重定向到另一个页面,然后返回到上一页。

有人知道会发生什么吗?

【问题讨论】:

  • id="linkConfirmacaoDialog"中删除data-rel="back"
  • 成功了!很明显,我不敢相信我没有看到这个......非常感谢!

标签: javascript jquery jquery-mobile


【解决方案1】:

问题是由#linkConfirmacaoDialog 确认按钮中的data-rel="back" 引起的。当您点击该按钮时,您会给出两种不同的导航命令。发生的情况是您导航到目标页面,然后返回历史记录。仅当您想关闭 popup 并保持在同一页面时,才使用 data-rel="back"

另一个问题,popup div 不应包含在 page div 以外的 div 中。此外,每当单击 列表项 时,您都会将多个 click 侦听器添加到 #linkConfirmacaoDialog。将click 绑定放在其他click 绑定之外。

$(function () {
    var itens = $('#ulMusicas>li');
    /* list item click listener */
    itens.click(function () {
        var nomeMusica = $(this).find('a').text();
        $('#dialogTitle').text('Add "' + nomeMusica + '"?');
        $('#popupConfirmacao').popup('open', {
            positionTo: 'window',
            transition: 'pop'
        });
    });
    /* confirmation button - popup */
    $('#linkConfirmacaoDialog').click(function () {
        $.mobile.changePage('/Controller2');
    });
});

【讨论】:

  • 我明白了.. 但是我的弹出窗口可以在我的页面的同一页面 div pgTest 中,还是我应该创建另一个页面 div 来包装弹出窗口?实际上,我试图做的是在单击我的列表视图的任何项目时从#linkConfirmacaoDialog 覆盖侦听器,因为要重定向的页面将是动态的。我坚持认为,当我这样做时,我会覆盖侦听器而不是添加多个侦听器
  • @Raiiy 不,只需将其保留在同一页面内,但 page div 应该是 popup 的直接父级。例如&lt;div data-role=page&gt;&lt;div data-role=popup&gt;popup&lt;/div&gt;&lt;div class="ui-content"&gt;&lt;/div&gt;&lt;/div&gt;
  • 我不知道,现在它工作得很好!谢谢!
猜你喜欢
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
相关资源
最近更新 更多