用户控件中的jQuery脚本仅在页面上运行该控件的一个实例

时间:2013-04-11 08:57:45

标签: jquery asp.net ajaxcontroltoolkit

我有一个带有gridview的CollapsiblePanelExtender控件,我把它放在一个用户控件中。

我将以下脚本添加到User控件的末尾以平滑动画:

<script type="text/javascript">

    function pageLoad(sender, args) {
        $find(("<%= CPE.ClientID %>"))._animation._fps = 35;
        $find(("<%= CPE.ClientID %>"))._animation._duration = 0.5;
    }

</script>

当我运行页面时,只有第二个手风琴被平滑,第一个是默认的缓慢。

以下是运行时脚本:

<script type="text/javascript">

    function pageLoad(sender, args) {
        $find(("MainContent_AccordionGV1_CPE"))._animation._fps = 35;
        $find(("MainContent_AccordionGV1_CPE"))._animation._duration = 0.5;
    }

</script>

。 。 。 。     

    function pageLoad(sender, args) {
        $find(("MainContent_AccordionGV2_CPE"))._animation._fps = 35;
        $find(("MainContent_AccordionGV2_CPE"))._animation._duration = 0.5;
    }

</script>

所以它应该按照这个工作。 知道为什么不是吗?

感谢。

增加:

我尝试手动将其添加到Page而不是User Control,同样的行为。

    <script type="text/javascript">

        function pageLoad(sender, args) {
            $find(('<%= AccordionGV1.FindControl("CPE").ClientID %>'))._animation._fps = 35;
            $find(('<%= AccordionGV1.FindControl("CPE").ClientID %>'))._animation._duration = 0.5;
        }
</script>

作品 当我添加相同的行,但对于AccordionGV2 ..第一个停止工作。

让我觉得这是一个比这更大的问题。

2 个答案:

答案 0 :(得分:5)

您应该在UserControl中使用此脚本:

(function () {
    Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoadedHandler);

    function pageLoadedHandler() {
        $find(("<%= CPE.ClientID %>"))._animation._fps = 35;
        $find(("<%= CPE.ClientID %>"))._animation._duration = 0.5;
    }
})();

这样每个用户控件都不会覆盖之前定义的pageLoad函数,并且会为pageLoaded事件使用自己的处理程序

答案 1 :(得分:1)

第二个pageLoad()函数覆盖第一个。尝试给每个实例的pageLoad()一个唯一的名称,例如用UserControl的ClientID后缀:

pageLoad_<%=this.ClientID%>()