SharePoint 2010上下文菜单事件处理程序
-
10-12-2019 - |
题
我想根据用户隐藏SharePoint 2010列表/库上下文菜单。
我使用的是javascript
$(document).ready(function(){
$('.ms-MenuUIPopupBody').live('blur', function() {
var elm = $("div.ms-MenuUIULItem a:contains('View in Browser')");
elm.remove();
$("div.ms-MenuUIULItem a:contains('Edit in Browser')").remove();
});
});
.
它仅在上下文菜单上仅在焦点或模糊或鼠标上遮住菜单。
上下文菜单由core.js文件动态生成
我需要在创建上下文菜单时添加脚本。
所以我需要查找上下文菜单的事件
如何查找单击事件并添加自定义代码。
使用“Andrew”我找到了良好的解决方案并处理上下文菜单事件
var _MenuHtc_show;
function OverrideMenuHtc_show()
{
_MenuHtc_show = window.MenuHtc_show;
window.MenuHtc_show= function (m,r,fr,ft,yoff) {
_MenuHtc_show(m,r,fr,ft,yoff);
var elm = $(".ms-MenuUIULItem[text='Alert Me']");
elm.remove();
};
}
ExecuteOrDelayUntilScriptLoaded(OverrideMenuHtc_show, "core.js")
.
它的工作正常,但其隐藏的上下文菜单适用于所有WebParts。 我需要找到所选的WebPart ID上下文菜单,以检查它是否正确的WebPart以隐藏上下文菜单。
我能在使用此代码选择WebPart后找到WebPart ID。
var listId = SP.ListOperation.Selection.getSelectedList();
.
或
var ctxCur = GetCurrentCtx();
var SPGridViewGuid = ctxCur.listName;
.
但如果我单击“v”符号,请在选择webparts返回null中。
是否有任何方法可以找到所选WebPart ID的上下文菜单。 所以它解决了我的问题。
解决方案
那是怎么样?
$('.s4-ctx').css('display','none');
.
它将隐藏显示上下文菜单的按钮。
如果需要隐藏上下文菜单,只能使用具有指定ID的Web部件,您需要使用:
$("div[webpartid='85c13a33-57a3-456b-a19b-c68c97756184'] .s4-ctx").css('display','none');
.
如果要删除菜单项,则为EX。“提醒我”添加此脚本覆盖标准core.js函数“menuhtc_show”并在指定webpart中的上下文菜单中隐藏菜单项:
var _MenuHtc_show;
function OverrideMenuHtc_show()
{
_MenuHtc_show = window.MenuHtc_show;
window.MenuHtc_show= function (m,r,fr,ft,yoff) {
_MenuHtc_show(m,r,fr,ft,yoff);
var items = $("div[webpartid='85c13a33-57a3-456b-a19b-c68c97756184'] .ms-MenuUIULItem[text='Alert Me']");
$(items).css('display','none');
};
}
ExecuteOrDelayUntilScriptLoaded(OverrideMenuHtc_show, "core.js")
. 其他提示
终于解决了我的问题
我增强了“安德鲁”脚本以制作全功能。
ExecuteOrDelayUntilScriptLoaded(OverrideMenuHtc_show, "core.js");
var _MenuHtc_show;
function OverrideMenuHtc_show() {
_MenuHtc_show = window.MenuHtc_show;
window.MenuHtc_show = function (m, r, fr, ft, yoff) {
_MenuHtc_show(m, r, fr, ft, yoff);
var ctxCur = listcontext;
//list or library GUID
var listid = ctxCur.listName;
if(listid =='your list\library GUID')
{
var elm = $(".ms-MenuUIULItem[text='Alert Me']");
elm.remove();
}
};
}
. 我想在SharePoint 2013上实现相同的。 CSS解决方案仅适用于特定页面。如果一个人创建一个新的视图,这将无法正常工作。
@kavalirakesh和@andrew答复部分适合我。 var ctxcur= listContext;在listContext上抛出异常是未定义的。 相反,我使用getcurrentctx()来获取ClientContext。
但是当我单击页面右上角的设置Cog时,我正在收到以下JavaScript错误。 “数据获取发生错误。请刷新页面并重试。”
我的JavaScript代码通过委托主页头上的委托控制添加。
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Control Id="AdditionalPageHead"
Sequence="90"
ControlSrc="~/_CONTROLTEMPLATES/15/MyCustomFolder/ECBDelegateControl.ascx" />
</Elements>
.
用户控制“ecbdelegatecontrol.ascx”的脚本在下面
<script type="text/javascript" src="../../../_layouts/15/MyScripts/Script/jquery-3.1.1.min.js"></script>
<script type="text/javascript">
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function () {
ExecuteOrDelayUntilScriptLoaded(OverrideMenuHtc_show, "core.js");
});
function OverrideMenuHtc_show() {
var ctx = GetCurrentCtx();
var listName = ctx.ListTitle;
if (listName == 'My First List' ||
listName == 'My Second List') {
var _MenuHtc_show;
_MenuHtc_show = window.MenuHtc_show;
window.MenuHtc_show = function (m, r, fr, ft, yoff) {
_MenuHtc_show(m, r, fr, ft, yoff);
var elm = $("li.ms-core-menu-item[text='Delete Item']");
elm.remove();
}
};
}
</script>
.
客户端连接为null,在我可以调用getcurrentctx()之前,我必须加载sp.js。 我曾经得到的JavaScript错误也消失了。 这比改变Core.js文件更好的解决方案。