0

以下のスクリプトは、ページが編集モードでない限り機能しません。これを解決するにはどうすればよいですか? 処理している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>
4

2 に答える 2

0

SharePoint JavaScript ファイル (CMSSiteManager.js) の 1 つが$オブジェクトを再定義し、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 に答える