单击可折叠时,jQuery Mobile页面会跳到顶部
我有一个带面板导航的jQuery Mobile页面。 最后两个元素是可折叠的,带有更多菜单项。 扩展或折叠这些会导致页面跳转到顶部,用户必须再次向下滚动以选择其中一个显示的条目。
我试图通过在可折叠div的click事件中执行.preventDefault()
来抑制此行为,但页面仍然跳转到顶部。
有谁知道如何防止这种情况?
提前致谢。
我的HTML:
自定义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; }
这似乎是一个开放的错误:
https://github.com/jquery/jquery-mobile/issues/7055
https://github.com/jquery/jquery-mobile/issues/6688
作为现在的原始修复 ,可以在引用jQuery Mobile源之后放置这样的脚本:
$(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(); } }; });
这将覆盖widget内部方法(注意注释行),而无需直接更改jQuery Mobile源代码(当从CDN加载框架时,这是不可能的)。
这是一个实例 。
一个建议在href中使用“ javascript:void(0);
”而不是“ #
”。 你可以检查它是否有效。 如果你的onclick由于某种原因失败,就像在运行时的错误一样返回false。 这样可以省你。
请添加return false; 作为每次onclick调用的最终回复。
例如:
onclick="ajax_content('impressum'); return false;"
最后,而不是做
return ajax_content('settings/profile_pic');
只需调用ajax_content而不返回,之后添加一个返回false,并在ajax_content块中移动你的逻辑(应该返回什么)。