Jquery脚本仅适用于编辑模式,Sharepoint

时间:2013-10-25 07:01:05

标签: jquery sharepoint

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

2 个答案:

答案 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();
});

1。使用显式jQuery调用

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

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

这很简单,但是你放松了一些可读性(因为我们都习惯看到$别名)。

2。使用包含本地$

的自包含函数

使用此代码:

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

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

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

PS:这个应用到SP2010 ......我不知道SP2013