0

除非页面处于编辑模式,否则下面的脚本不会工作。我该如何解决这个问题?我把它放在它正在处理的共享点日历​​下面的 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>
4

2 回答 2

0

SharePoint JavaScript 文件 (CMSSiteManager.js) 之一重新定义了$对象并且可能与 jQuery 冲突。

此文件并不总是在页面上注册。也许在您的情况下,这仅在编辑模式下注册(通常在您有资产选择器时)。

幸运的是,有可能的解决方法。

假设您当前的 js 代码是:

$(function(){
    $(".someclass").hide();
});

1. 使用显式 jQuery 调用

转换您的代码以直接使用 jQuery 对象,而不是$别名:

jQuery(function(){
    jQuery(".someclass").hide();
});

这很容易,但是您会失去一些可读性(因为我们都习惯于查看$别名)。

2. 使用自包含函数,具有本地$

使用此代码:

(function($){
    $(function(){
        $(".someclass").hide();
    });
})(jQuery);

此代码创建一个等待本地$参数的闭包。此参数由实际的 jQuery 对象提供。

我喜欢这种技术,因为您可以避免冲突并仍然使用$别名(实际上它不再是别名,而是本地参数)。

PS:这适用于SP2010 ...我不知道SP2013

于 2013-10-25T08:42:22.203 回答
0

我认为你应该打电话$(document).ready(function()... 而不是$('.ms-acal-month').ready(function().... .ready()不适用于特定元素。

编辑模式可能是在 DOM 准备好之后加载 CEWP,甚至在链接准备好之后,这就是它在那里工作的原因。

于 2013-10-25T07:16:00.530 回答