同一页面上的多个用户控件实例

时间:2013-07-06 11:40:04

标签: javascript asp.net ajaxcontroltoolkit web-user-controls

我有一个使用Ajax dropdownextender和asp控件的用户控件。 当用户从面板中选中任何复选框时,我想停止下拉面板。 为此我使用这个java脚本代码

var DDE;
//Onload event set droparrow visibility to true
function DropDownExtender1_pageLoad() {

    DDE = $find('<%= DDE.ClientID%>');
    DDE._dropWrapperHoverBehavior_onhover();
    $get('<%= DropPanel.ClientID%>').style.width = $get('<%= txtDisplay.ClientID%>').clientWidth;

    if (DDE._dropDownControl) {
        $common.removeHandlers(DDE._dropDownControl, DDE._dropDownControl$delegates);
    }
    DDE._dropDownControl$delegates = {
        click: Function.createDelegate(DDE, ShowMe),
        contextmenu: Function.createDelegate(DDE, DDE._dropDownControl_oncontextmenu)
    }
    $addHandlers(DDE._dropDownControl, DDE._dropDownControl$delegates);

    //dropdown arrow key allways visible.
    $find('<%= DDE.ClientID%>').unhover = doNothing;
    $find('<%= DDE.ClientID%>')._dropWrapperHoverBehavior_onhover();

    //Maintain scroll position
    var h = document.getElementById('<%= hfScrollPosition.ClientID%>');
    document.getElementById('<%= divGrid.ClientID%>').scrollTop = h.value;

}

//do nothing on arrow key hover
function doNothing() { }

//Ragister onload event
Sys.Application.add_load(DropDownExtender1_pageLoad);

//Ragister on page load
function ShowMe() {
    DDE._wasClicked = true;
}

当我在aspx页面上只使用我的一个控件实例时,这很好用。 但是当我在同一页面上使用超过1个实例时。那时候一切正常,除了 控制的可见性。当用户点击任何复选框时,它会隐藏面板。 但是表单的最后一个控件工作得很好。 我的意思是说脚本是由最后一个控件过载的。

任何人都可以告诉我在这种情况下该怎么做。

1 个答案:

答案 0 :(得分:0)

最后我得到了一个解决这个问题的方法。我删除了全局变量并将函数ShowMe更改为ShowMe<%=this.ClientID%>并更新了委托中的ShowMe<%=this.ClientID%>。它有效。

更新的代码

function DropDownExtender1_pageLoad() {
    var DDE;

    DDE = $find('<%= DDE.ClientID%>');
    DDE._dropWrapperHoverBehavior_onhover();
    $get('<%= DropPanel.ClientID%>').style.width = $get('<%= txtDisplay.ClientID%>').clientWidth;

    if (DDE._dropDownControl) {
        $common.removeHandlers(DDE._dropDownControl, DDE._dropDownControl$delegates);
    }
    DDE._dropDownControl$delegates = {
        click: Function.createDelegate(DDE, ShowMe<%=this.ClientID %>),
        contextmenu: Function.createDelegate(DDE, DDE._dropDownControl_oncontextmenu)
    }
    $addHandlers(DDE._dropDownControl, DDE._dropDownControl$delegates);

    //dropdown arrow key allways visible.
    $find('<%= DDE.ClientID%>').unhover = doNothing;
    $find('<%= DDE.ClientID%>')._dropWrapperHoverBehavior_onhover();

    //Maintain scroll position
    var h = document.getElementById('<%= hfScrollPosition.ClientID%>');
    document.getElementById('<%= divGrid.ClientID%>').scrollTop = h.value;
}

//do nothing on arrow key hover
function doNothing() { }

//Ragister onload event
Sys.Application.add_load(DropDownExtender1_pageLoad);

//Ragister on page load
function ShowMe<%=this.ClientID %>() {
    var DDE = $find('<%= DDE.ClientID%>');
    DDE._wasClicked = true;
}