除非页面处于编辑模式,否则下面的脚本会起作用。我可以解决这个问题吗? 我把它放在它正在处理的共享点日历下的CEWP
脚本的目标是将标题显示在日历单元格上作为超链接,以对话框形式打开显示表单而不是:
<script src="/jquery-1.9.1.js"></script>
<script type="text/javascript">
function openDialogBox(Url)
{
var ModalDialogOptions = { url:Url, width: 600, height: 500, showClose: true, allowMaximize: true};
SP.SOD.execute('sp.ui.dialog.js', 'SP.UI.ModalDialog.showModalDialog', ModalDialogOptions);
}
$('.ms-acal-month').ready(function () {
setTimeout(function() {
$('a[href*="DispForm.aspx"]').each(function() {
$(this).attr('onclick', 'openDialogBox("' + $(this).attr('href') + '")');
//$(this).attr('onclick', ' ');
//alert($(this).attr('href'));
});
$('a[href*="DispForm.aspx"]').each(function() {
$(this).attr('href','javascript:openDialogBox("' + $(this).attr('href') + '")');
});
}, 3000);
});
</script>
答案 0 :(得分:0)
我认为你应该拨打$(document).ready(function()...
而不是$('.ms-acal-month').ready(function()...
。 .ready()
不适用于特定元素。
编辑模式可能是在DOM准备好之后加载CEWP,或者甚至在链接准备好之后加载CEWP,这就是它在那里工作的原因。
答案 1 :(得分:0)
其中一个SharePoint JavaScript文件(CMSSiteManager.js)重新定义了$
对象,可能与jQuery冲突。
此文件并非始终在页面上注册。也许在您的情况下,这仅在编辑模式下注册(通常在您拥有资产选择器时)。
幸运的是,有可能的解决方法。
假设你当前的js代码是:
$(function(){
$(".someclass").hide();
});
转换代码以直接使用jQuery对象,而不是$
别名:
jQuery(function(){
jQuery(".someclass").hide();
});
这很简单,但是你放松了一些可读性(因为我们都习惯看到$
别名)。
$
使用此代码:
(function($){
$(function(){
$(".someclass").hide();
});
})(jQuery);
此代码创建一个等待本地$
参数的闭包。此参数由实际的jQuery对象提供。
我喜欢这种技术,因为你可以避免冲突,仍然使用$
别名(实际上它不再是别名,而是一个本地参数)。
PS:这个应用到SP2010 ......我不知道SP2013