当前位置: 首页 > 知识库问答 >
问题:

点击可折叠文件时,jQuery移动页面跳到顶部

农星华
2023-03-14

我有一个带有面板导航的jQuery移动页面。最后两个元素是可折叠的,带有更多菜单项。展开或折叠这些选项会导致页面跳转到顶部,用户必须再次向下滚动以选择显示的条目之一。

我试图通过执行来抑制这种行为。preventDefault()在可折叠div的click事件中,但页面仍跳到顶部。

有人知道如何防止这种情况吗?

提前感谢。

我的HTML:

<div data-role="panel" id="panel" data-position="left" data-theme="a" data-display="overlay" data-position-fixed="true" >
    <ul class="ui-listview" id="main_nav" data-role="listview" data-theme="a" >
        <!-- lots of other items -->  
        <li class="custom-li" data-icon="carat-r" >
            <div data-role="collapsible" data-iconpos="right" class="custom-collapsible" data-theme="a">
                <h2>Mein Account</h2>
                <ul class="ui-listview mainNav" data-role="listview" data-theme="a" >
                    <li id="nav_account" data-icon="carat-r">
                        <a href="#" onclick="return ajax_content('settings/account');" data-rel="close">Account Verwalten</a>
                    </li>
                    <li id="nav_profile_edit" data-icon="carat-r">
                        <a href="#" onclick="return ajax_content('settings/profile_edit');" data-rel="close">Profil bearbeiten</a>
                    </li>
                    <li id="nav_profile_interview" data-icon="carat-r">
                        <a href="#" onclick="return ajax_content('settings/profile_interview');" data-rel="close">Profil Interview bearbeiten</a>
                    </li>
                    <li id="nav_profile_pic" data-icon="carat-r">
                        <a href="#" onclick="return ajax_content('settings/profile_pic');" data-rel="close">Profilbild hochladen</a>
                    </li>
                </ul>
            </div>
        </li>
        <li class="custom-li" data-icon="carat-r" >
            <div data-role="collapsible" data-iconpos="right" class="custom-collapsible" data-theme="a">
                <h2>AGB / Impressum</h2>
                <ul class="ui-listview mainNav" data-role="listview" data-theme="a" >
                    <li id="nav_profile_edit" data-icon="carat-r">
                        <a href="#" onclick="ajax_content('impressum')" data-rel="close">Impressum</a>
                    </li>
                    <li id="nav_profile_intervview" data-icon="carat-r">
                        <a href="#" onclick="ajax_content('agb')" data-rel="close">AGB</a>
                    </li>
                    <li id="nav_profile_pic" data-icon="carat-r">
                        <a href="#" onclick="ajax_content('datenschutz')" data-rel="close">Datenschutz</a>
                    </li>
                </ul>
            </div>
        </li>
    </ul>
</div>

自定义CSS:

#main_nav .custom-li {
    padding: 0 !important;
    border-width:0 !important;
}

#main_nav .custom-bottom-li {
    border-top-width: 0 !important;  
}

#main_nav .custom-collapsible {
    margin-top:-7px;
    margin-bottom: -9px;
    border-bottom-right-radius: 0 !important;
    border-bottom-left-radius: 0 !important;
    border-top-right-radius: 0 !important;
    border-top-left-radius: 0 !important;
    border-width:0 !important;
}

#main_nav .ui-collapsible-content{
    margin-top: -7px !important;
    margin-bottom: 7px !important;
}

共有3个答案

竺国兴
2023-03-14

添加返回false;作为每个onClick调用中的最终返回。

例如:

onclick="ajax_content('impressum'); return false;"

最后,与其做

return ajax_content('settings/profile_pic');

只需调用ajax_content而不返回,在后面添加一个返回false,并将您的逻辑(返回应该做什么)移动到ajax_content块内。

马阳晖
2023-03-14

一个建议是使用“javascript:void(0);”而不是href中的“\/code>”。你可以检查一下,这样行吗。如果onclick由于某种原因失败,则返回false,就像运行时出错一样。这将拯救你。

颛孙沈义
2023-03-14

这似乎是一个开放的错误:
https://github.com/jquery/jquery-mobile/issues/7055
https://github.com/jquery/jquery-mobile/issues/6688

作为目前的原始修复,类似这样的脚本可以放在对jQuery Mobile source的引用之后:

$(function() {
    $.mobile.panel.prototype._positionPanel = function() {
        var self = this,
            panelInnerHeight = self._panelInner.outerHeight(),
            expand = panelInnerHeight > $.mobile.getScreenHeight();

        if ( expand || !self.options.positionFixed ) {
            if ( expand ) {
                self._unfixPanel();
                $.mobile.resetActivePageHeight( panelInnerHeight );
            }
          //window.scrollTo( 0, $.mobile.defaultHomeScroll );
        } else {
            self._fixPanel();
        }
    };
});

这将覆盖小部件内部方法(注意注释行),而无需直接更改jQuery移动源代码(当框架从CDN加载时,这是不可能的)。

这里有一个活生生的例子。

 类似资料:
  • 我对jQuery移动锚有问题。当我点击带有某个锚的_blank链接时,我会重定向到新选项卡中的新页面并导航到锚链接。但是当页面完全加载时,页面跳转到页面顶部

  • 本文向大家介绍jquery实现点击页面回到顶部,包括了jquery实现点击页面回到顶部的使用技巧和注意事项,需要的朋友参考一下 a)下面看看实现,实现很简单,通过JQ判断滚动条向下滚动的长度大于多少时显示【回到顶部+回到首页】的图标(换一种理解:滚动条顶端距离页面顶部的距离),另外一种实现方法,就是通过锚标记,很好理解,就是标记一个位置,事件激活时,给我回到这个位置 b)JQ判断滚动条向下滚动的长

  • 问题内容: 我目前在jQuery中使用标签来启动点击事件等。 例子是 但是我讨厌’#’如何使页面跳到页面顶部。我该怎么办呢? 问题答案: 在jQuery中,当您处理click事件时, 返回false可阻止链接以通常的方式响应 阻止发生默认操作(访问属性):

  • 主要内容:可折叠内容块,实例,实例,嵌套可折叠块,实例,可折叠集合,实例,更多实例可折叠内容块 可折叠块允许您隐藏或显示内容 - 对于存储部分信息很有用。 如需创建一个可折叠的内容块,需要为容器添加 data-role="collapsible" 属性。在容器(div)内,添加一个标题元素(H1-H6),后跟您想要进行扩展的 HTML 标记: 实例 <div data-role="collapsible"> <h1>点击我 - 我可以折叠!</h1> <p>我是可折叠的内容。<

  • 可折叠内容块 可折叠块允许您隐藏或显示内容 - 对于存储部分信息很有用。 如需创建一个可折叠的内容块,需要为容器添加 data-role="collapsible" 属性。在容器(div)内,添加一个标题元素(H1-H6),后跟您想要进行扩展的 HTML 标记: <div data-role="collapsible"> <h1>点击我 - 我可以折叠!</h1> <p>我是可折叠的内容。</

  • 我正在使用jQuery移动框架实现一个移动网站。但当我点击锚定标签时,页面将无法正常加载,屏幕截图中会显示一个空白的白色页面。 jQuery和jQuery移动脚本标签: 我的JSP页面: 单击锚标记后,控件进入控制器(Java),然后控制器将返回一个JSP页面;但是,会显示一个空白页。如果重新加载页面,则数据显示正确。 下一行使控件转到: 退货“/目录/m-类别-产品”; 但是第一次这个页面没有任