自定义webpart在一个页面上多次出现问题
我目前正在开发一个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>
在类似的场景我用<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");
});
});
你可以有你的webpart加载与ClientScriptManager的JavaScript。像这样将只包括脚本一次:
ClientScriptManager scriptManager = this.Page.ClientScript;
if (!scriptManager.IsClientScriptIncludeRegistered("scriptName"))
scriptManager.RegisterClientScriptInclude("scriptName", "scriptUrl");
您也可以使用.RegisterClientScriptBlock,如果你不能使用一个外部文件。
如果你在一个文件中有你的javascript,你可以使用ScriptLink.Register方法。
ScriptLink封装了ClientScriptManager调用以及其他功能。请注意,如果name参数是相对路径,则JavaScript文件需要位于12 \ TEMPLATE \ LAYOUTS \ LCID目录中(其中LCID是您的语言编号)。