问题描述:

自定义母版页,为了使左边导航和顶部导航位置不变(不滚动),将原本位于ribbon下方的#s4-workspace调整到左侧导航右边。

<div id="s4-workspace" style="position: relative; margin-left: 155px; ">body #s4-workspace {
overflow-y: scroll;
overflow-x: auto;
position: relative;
left: 0px;
}

  

这时,如果视图字段较多,需要往右滚动主区域,会出现过滤菜单被左侧导航压住的情况。

解决:

1) 修改web.config将编译模式调整为debug,这时候,moss会采用调试模式的js,如core.debug.js.

2)跟踪js代码,最终发现设置菜单位置的js函数位于Core.debug.js的SetMenuPosition

3)SetMenuPosition这个函数比较复杂,但是好在它是在最后设置菜单位置的:

oPopup.style.left=posLeft+"px";
oPopup.style.top=posTop+"px";
oPopup.LeftForBackIframe=posLeft;
oPopup.TopForBackIframe = posTop;

这样,我们就可以直接把代码附加到这个函数后面来修复菜单的位置。

修复逻辑:

1-检测菜单是否处于#s4-workspace内,若否,则不做操作(因为moss中的其他弹出菜单,包括网站操作,也是采用这个js来设置位置的)

2-如果菜单的left小于#s4-workspace的左侧滚动宽度,则将菜单的left设置为#s4-workspace的左滚动宽度(scrollLeft)

4)修该moss自带的js文件不是一个推荐的做法,因为系统升级的时候自带的js文件可能被覆盖掉。所以,这里采用一种类似于“重载”的方式。代码如下:

//fix function begin--------------------
//add by zjy to fix the filter menu is hidden by left bar issue
var defaultSetMenuPosition = SetMenuPosition;
SetMenuPosition = function (oMaster, oParent, oPopup, oInnerDiv, fFlipTop, fTopLevel) {defaultSetMenuPosition(oMaster, oParent, oPopup, oInnerDiv, fFlipTop, fTopLevel);var $parentWs = $(oPopup).closest("#s4-workspace");if($parentWs.length==0)return;var wsScrollLeft = $parentWs.scrollLeft();var leftStr = "" + oPopup.style.left;var intMenuLeft = parseInt(leftStr.substring(0,leftStr.length-2)); //2px to 2if(intMenuLeft<wsScrollLeft){oPopup.style.left = wsScrollLeft + "px";oPopup.LeftForBackIframe = wsScrollLeft;}
}
//fix function end-----------------------

备注:

1)将以上函数添加到任意地方即可,如自定义的母版页中。 

此函数依赖jquery,请确保母版页引用jquery.

因为core.js是采用SOD加载的,所以需要用ExecuteOrDelayUntilScriptLoaded确保SetMenuPosition函数已加载:

// Fix issue: popup menu was hidden by left menu bar.ExecuteOrDelayUntilScriptLoaded(function () {var defaultSetMenuPosition = SetMenuPosition;SetMenuPosition = function (oMaster, oParent, oPopup, oInnerDiv, fFlipTop, fTopLevel) {defaultSetMenuPosition(oMaster, oParent, oPopup, oInnerDiv, fFlipTop, fTopLevel);var $parentWs = $(oPopup).closest("#s4-workspace");if ($parentWs.length == 0)return;var wsScrollLeft = $parentWs.scrollLeft();var leftStr = "" + oPopup.style.left;var intMenuLeft = parseInt(leftStr.substring(0, leftStr.length - 2)); //2px to 2if (intMenuLeft < wsScrollLeft) {oPopup.style.left = wsScrollLeft + "px";oPopup.LeftForBackIframe = wsScrollLeft;}}}, "core.js")</script>

2)为避免列表项上下文菜单位置异常,滚动条一定要设置在s4-workspace上。

转载于:https://www.cnblogs.com/jianyi0115/p/3777755.html

自定义母版页之列表过滤菜单位置issue fix相关推荐

  1. VB 小技巧自定义TextBox文本框右键菜单

    'TextBox单击鼠标右键总是跟出来一个系统默认的关于文本操作的菜单,如何把它去掉?请看如下代码. Private Sub Text1_MouseDown(Button As Integer, Sh ...

  2. jsp自定义图文新闻列表标签结合ssh2,带分页功能

    jsp自定义图文新闻列表标签结合ssh2,带分页功能(欢迎大家讨论指点,共同进步) 1.service层 (模拟返回数据) package com.mingda.service.impl;import ...

  3. html 元素允许右键,JavaScript 自定义html元素鼠标右键菜单功能

    自定义html元素鼠标右键菜单 实现思路 在触发contextmenu事件时,取消默认行为(也就是阻止浏览器显示自带的菜单),获取右键事件对象,来确定鼠标的点击位置,作为显示菜单的left和top值 ...

  4. Android自定义滚动条——城市列表

    Android自定义滚动条--城市列表 效果视频 绘制滚动条 区别选中与未选择文字 绘制等高间距 滑动事件监听 解析承载城市数据的XML文件 下载XML文件 解析文件 适配器 建立适配器类 适配器子项 ...

  5. Windows Server 2008自定义任务栏和开始菜单

    1.1.1 任务2:自定义任务栏和开始菜单 将开始菜单改成经典模式 扩展控制面板和显示管理工具 步骤: 1. 点击,默认开始菜单如下图所示.如果不适应你的使用习惯,你可将其改为传统开始菜单. 2. 右 ...

  6. Android自定义顶部栏及侧滑菜单和fragment+viewpag滑动切换的实现

    嘿嘿嘿,关于android滑动的操作,是不是经常都会用到呢. 我肯定也要学习一下啦. https://blog.csdn.net/u013184970/article/details/82882107 ...

  7. 根据用户id查询菜单列表(菜单权限问题)

    根据用户id查询菜单列表(菜单权限问题): 最高级用户菜单效果图: 较低级别用户菜单效果图: SQL语句分析图: 根据用户id查询对应菜单(权限)SQL语句: SELECT * FROM user_r ...

  8. list -- set方法——替换列表中指定位置的元素

    set方法用于替换列表中指定位置的元素. 返回值:索引位置替换前的元素. 参数:index用于指定要替换元素所在位置的索引. 参数:element用于指定要存储在指定位置的元素. 示例  本示例使用L ...

  9. java递归把list菜单列表转为菜单树

    java递归把列表转为菜单树 菜单实体类 package com.utils.menu;import java.util.List;public class Menu {private String ...

最新文章

  1. 最新Pycharm开发工具安装步骤,四大步骤就能学会
  2. node.js 原型污染攻击的分析与利用
  3. python和c++哪个好找工作-python和C++语言有何优缺点?哪个更适合人工智能?
  4. Boost signals(1) 基本介绍
  5. CSS中display:block、inline、inline-block
  6. gj7 对象引用、可变性和垃圾回收
  7. Spring Boot 入门 IDEA 版本 2小时学会springBoot 代码上传至gitee 或者github 事务没做出来
  8. 两层卷积网络实现手写字母的识别(基于tensorflow)
  9. iBiology |专业的生信科普网站
  10. Quartz.NET快速入门指南
  11. Sql server备份数据库不执行
  12. [转]vmlinuz
  13. 占位棋 python_Python开发象棋小游戏(总体思路分析)
  14. 中文事件抽取研究综述
  15. input输入效果控制onfocus和onblur事件(转)
  16. 哇哦,教你如何使用jumpserver堡垒机添加windows资产
  17. 基于SSM+Bootstrap【爱校教务系统管理系统】附源码
  18. TypeError: classification_report() takes 2 positional arguments but 3 were given的解决方案
  19. BigGAN-论文阅读笔记
  20. C 编程语言多少数学知识,编程,需要多少英语,数学知识?初中毕业直接修编程,会不会太快。学不进?...

热门文章

  1. .net core项目启动时报_未处理Socket异常(以一种访问权限不允许的方式做了一个访问套接字的尝试。)...
  2. 选择company回显appname
  3. (十二)进一步掌握STVD/COSMIC
  4. firefox浏览器 插件--【维基百科+谷歌翻译】高级应用之 带图翻译
  5. FreeCodeCamp 中级算法(个人向)
  6. 《101 Windows Phone 7 Apps》读书笔记-PASSWORDS SECRETS
  7. 无法更改密码的解决办法--passwd: User not known
  8. Ubuntu修改DNS服务器
  9. CSS3盒子阴影box-shadow
  10. java开发环境搭建(重点)