2011-01-06 54 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是您的语言编号)。

相关问题