【问题标题】:Issue with custom webpart multiple times on one page在一个页面上多次出现自定义 Web 部件问题
【发布时间】:2011-06-04 17:45:17
【问题描述】:

我目前正在开发一个 webpart,它运行一些 jquery,其中的一些元素具有切换功能。我在这里的问题是,这个 webpart 意味着要在同一个 webpartpage 上多次使用,我发现这给我带来了很多麻烦,因为 javascript 将多次加载到页面上,试图触发相同元素的函数。

我认为创建几个方法来更改此处和此处的不同值会很聪明,但最后我遇到了同样的问题。

所以现在我没有想法了,我在 jquery 和 javascript 方面的技能也很有限。因此,任何帮助、示例、指示——任何让我更接近解决方案的东西,我都会非常感激。

jquery 脚本:

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

jquery 切换的 HTML:

<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>

【问题讨论】:

    标签: jquery sharepoint sharepoint-2007 web-parts


    【解决方案1】:

    您可以让您的 webpart 使用 ClientScriptManager 加载 javascript。像这样的东西只会包含一次脚本:

    ClientScriptManager scriptManager = this.Page.ClientScript;
    
    if (!scriptManager.IsClientScriptIncludeRegistered("scriptName"))
        scriptManager.RegisterClientScriptInclude("scriptName", "scriptUrl");
    

    如果不能使用外部文件,也可以使用.RegisterClientScriptBlock

    【讨论】:

      【解决方案2】:

      在类似的场景中,我曾经用&lt;dl id="togglingDiv" runat="server"&gt; 替换&lt;dl class="togglingDiv"&gt;。当它有“runat server”时,Asp.net 负责为“togglingDiv”的每个实例生成不同的 ID。

      然后将 jQuery 代码放入 ascx 文件中,并使用 ASP.Net 的 &lt;%= .... %&gt; 构造生成它:

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

      【讨论】:

        【解决方案3】:

        如果您的 javascript 在文件中,您可以使用 ScriptLink.Register 方法。

        ScriptLink 封装了 ClientScriptManager 调用以及其他功能。请注意,如果 name 参数是相对路径,则 javascript 文件需要位于 12\TEMPLATE\LAYOUTS\ LCID 目录中(其中 LCID 是您的语言编号)。

        【讨论】:

          猜你喜欢
          • 2019-04-12
          • 2012-04-03
          • 1970-01-01
          • 2015-04-07
          • 2015-01-29
          • 2017-06-05
          • 1970-01-01
          • 2010-12-03
          • 1970-01-01
          相关资源
          最近更新 更多