Аккордеон не работает должным образом - PullRequest
0 голосов
/ 07 марта 2011

Мне нужно показать некоторую функциональность, аналогичную гармошке jquery, поэтому я создал специальную функцию jquery для создания эффекта.

есть сетка, в которой есть два div, здесь код.

<asp:GridView ID="grdAccordion" runat="server" AutoGenerateColumns="false" Width="200px">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <div class="myFirstDiv" onclick="testToggle(this)">
                        <%#Eval("Name")%>
                            <div class="mySecondDiv" style="display:none">
                           <%#Eval("Person_Name")%> 
                            </div>
                        </div>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

Второй div имеет свойство style, отображающее none.по умолчанию все div закрыты.

чем я сделал функцию js, которая использует функцию переключения для выполнения кода действия.

function testToggle(testDiv) {
        debugger
            var sntHdnValue = $('#hdnSetFlag').val();
            if (sntHdnValue == 1) {
                $(testDiv).find('div:first').show().attr('isOpen', 'true');
            }
            else {
             $(testDiv)
            .parents('table:first')
            .find('div[isOpen=true]').removeAttr('isOpen').toggle('slow');
            $(testDiv).find('div:first').show().attr('isOpen', 'true');
            }
            sntHdnValue++;
            $('#hdnSetFlag').val(sntHdnValue);
        }

здесь я использовал скрытое поледайте мне знать, что это начальное состояние, когда все закрыто, я добавляю свой атрибут attr isopen для моей идентификации

1) текущая ситуация такова: при загрузке всегда должна быть закрыта всякая вещь.2) чем за один раз должен быть открыт только один div.

это работает нормально.

Проблема в том, что если я нажимаю на тот же div, на который я нажал, чтобы открыть, чем у него есть два пользовательскихattr isopen теперь нарушает второй случай.как это решить.

1 Ответ

0 голосов
/ 07 марта 2011

Есть обходной путь.

обновленные функции.

 var glDivID = 0;
        function testToggle(testDiv) {
        debugger
        var sntHdnValue = $('#hdnSetFlag').val();
        var dvID = $(testDiv).attr('id');
        if (sntHdnValue == 1) {
                $(testDiv).find('div:first').show().attr('isOpen', 'true');
            }
            else {
             $(testDiv)
            .parents('table:first')
            .find('div[isOpen=true]').removeAttr('isOpen').toggle('slow');
             if (glDivID != dvID) {
                 $(testDiv).find('div:first').show().attr('isOpen', 'true');
             }
            }
            sntHdnValue++;
            $('#hdnSetFlag').val(sntHdnValue);
            glDivID = dvID;
        }

я добавил идентификатор во время добавления данных в grid.checked то же самое для проверки, нажата ли она самостоятельно или нет, она делает трюк

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