2011-01-06 53 views
1

我目前正在開發一個web部分,它運行一些jquery,並在其中的某些元素上進行切換功能。我的問題在於,這個webpart是爲了在同一個webpartpage上多次使用而發現的,我發現我遇到了很多麻煩,因爲javascript會在頁面上加載多次,試圖觸發相同元素上的函數。自定義webpart在一個頁面上多次出現問題

我認爲這將是聰明的創建一個方法來改變不同的值在這裏和那裏,但最終我結束了同樣的問題。

所以,現在我沒有想法,我的技能與jQuery和JavaScript是有限的。所以,任何幫助,樣本,指針 - 任何讓我更接近解決方案的東西,我都會很滿意。

的jQuery腳本:

$(document).ready(function(){ 
     $('.togglingDiv').find('dd').hide().end().find('dt').click(function() { 
      $(this).next().slideToggle("fast"); 
     }); 
}); 

的HTML jQuery是切換:

<dl class="togglingDiv"> 
    <dt>Lorem ipsum</dt> 
    <dd> 
     Lorem ipsum dolor sit amet, consectetur adipiscing elit.</dd> 
    <dt>Lorem ipsum</dt> 
    <dd> 
     Lorem ipsum dolor sit amet, consectetur adipiscing elit.</dd> 
    <dt>Lorem ipsum</dt> 
    <dd> 
     Lorem ipsum dolor sit amet, consectetur adipiscing elit.</dd> 
</dl> 

回答

2

在類似的場景我用<dl id="togglingDiv" runat="server">取代<dl class="togglingDiv">。當它具有「runat服務器」時,Asp.net負責爲每個「togglingDiv」實例生成一個不同的ID。

然後你把jQuery代碼在ASCX文件,並使用ASP.Net的<%= .... %>結構產生的呢:

$(document).ready(function(){  
$('#<%=togglingDiv.ClientId%>').find('dd').hide().end().find('dt').click(function() 
    {    
    $(this).next().slideToggle("fast"); 
    }); 
}); 
3

你可以有你的webpart加載與ClientScriptManager的JavaScript。像這樣將只包括腳本一次:

ClientScriptManager scriptManager = this.Page.ClientScript; 

if (!scriptManager.IsClientScriptIncludeRegistered("scriptName")) 
    scriptManager.RegisterClientScriptInclude("scriptName", "scriptUrl"); 

您也可以使用.RegisterClientScriptBlock,如果你不能使用一個外部文件。

1

如果你在一個文件中有你的javascript,你可以使用ScriptLink.Register方法。

ScriptLink封裝了ClientScriptManager調用以及其他功能。請注意,如果name參數是相對路徑,則JavaScript文件需要位於12 \ TEMPLATE \ LAYOUTS \ LCID目錄中(其中LCID是您的語言編號)。

相關問題