Многократный экземпляр пользовательского элемента управления на одной странице

У меня есть пользовательский элемент управления, использующий элемент управления 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 экземпляра на одной странице. В это время все работает нормально, кроме видимости элемента управления. В то время, когда пользователь нажимает на любой флажок, он скрывает панель. Но последний элемент управления формой работает отлично. Я имею в виду, что скрипт перезимовал последним элементом управления.

Может ли кто-нибудь сказать мне, что я должен делать в этом случае.


person Ashish Rathore    schedule 06.07.2013    source источник
comment
stackoverflow.com/a/14974845/360171   -  person Yuriy Rozhovetskiy    schedule 08.07.2013
comment
Я пробовал это, но это не работает. Наконец, я решил эту проблему. И я скоро отправлю готовый ответ.   -  person Ashish Rathore    schedule 08.07.2013


Ответы (1)


Наконец-то я нашел решение этой проблемы. Я удалил глобальную переменную и изменил имя функции 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;
}
person Ashish Rathore    schedule 08.07.2013