1

Ajax dropdownextender ans 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 つだけ使用する場合にうまく機能します。しかし、同じページで複数のインスタンスを使用すると、その時点で、コントロールの可視性を除いてすべてが正常に機能します。その時点で、ユーザーがチェックボックスをクリックすると、パネルが非表示になります。しかし、フォームの最後のコントロールは完全に正常に機能します。つまり、スクリプトは最後のコントロールによってオーバーウィンターされます。

この場合、私は何をすべきか教えてもらえますか。

4

1 に答える 1

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;
}
于 2013-07-08T10:57:41.597 に答える