Неправильная функция javascript вызывается, когда элемент управления ascx добавлен на страницу дважды - PullRequest
3 голосов
/ 01 февраля 2012

У меня есть элемент управления, который содержит функцию javascript, которая вызывается при событии нажатия кнопки клиента:

OnClientClicked="ClearTree" 

функция:

    function ClearTree() {
        var tree = $find('<%=cboOrgUnits.Items[0].FindControl("tvOrgUnits").ClientID %>');
        var nodes = tree.get_nodes();
        for (var i = 0; i < nodes.get_count(); i++) {
            nodes.getNode(i).uncheck();
        }
   };

Что все работает нормально, кроме случаев, когда элемент управления находится на одной странице дважды. Когда это так, есть 2 экземпляра функции «ClearTree», из которых кажется, что всегда добавляется второй добавленный.

Проблема в том, что вызываемый экземпляр ClearTree () может не ссылаться на правильное дерево.

Каковы возможные обходные пути для этого?

Вот остальная часть разметки:

<telerik:RadComboBox ID="cboOrgUnits" runat="server" Width="400px" ShowToggleImage="True" Style="vertical-align: middle;" EmptyMessage="Choose organisation units to group by" ExpandAnimation-Type="None" CollapseAnimation-Type="None">
<HeaderTemplate>
    <div>
        <span class="right" style="margin:2px"><telerik:RadButton ID="rbClear" runat="server" Text="Clear" Visible="True" OnClientClicked="ClearTree" AutoPostBack="False"/></span>
        <span class="right" style="margin:2px"><telerik:RadButton ID="rbDone" runat="server" Text="Done" Visible="True" OnClick="rbDone_Click"/></span>
        <div class="clear"></div>
    </div>
</HeaderTemplate>
<ItemTemplate>
    <div>
        <telerik:RadTreeView ID="tvOrgUnits" runat="server" CheckBoxes="true" Style="z-index: 100" CheckChildNodes="True">
            <Nodes>
            </Nodes>
        </telerik:RadTreeView>
    </div>
</ItemTemplate>
<Items>
    <telerik:RadComboBoxItem Text="" />
</Items>
</telerik:RadComboBox>

1 Ответ

6 голосов
/ 01 февраля 2012

Вместо встраивания ClientID элемента управления в вашу функцию, сделайте его параметром функции, а затем измените ваш OnClientClicked, чтобы передать ClientID в функцию.1007 * ОБНОВЛЕНИЕ: Поскольку rbClear определено внутри шаблона, вам может потребоваться вызвать cboOrgUnits.FindControl("rbClear"), чтобы получить ссылку на него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...