404 messaggi dal 09 maggio 2012
Salve, il problema è questo: in una list view viene creato dinamicamente un elenco categorie con i rispettivi prodotti. Al clic sulla categoria si espande il DIV contenente i prodotti. Al clic su un'altra categoria si espande il rispettivo DIV ma rimane aperto quello precedente. Io vorrei che al clic di una categoria si apra la corrente e si chiudano le altre e cliccando su quella aperta si chiuda. Il codice JScript che sto utilizzando è questo:

$(document).ready(function () {

$(".elenco-prodotti").hide();
$(".elenco-capo").show();

});
function show1(objNumber) {


$("#ld" + objNumber).slideToggle();


}

Il list view:

<asp:ListView ID="list1" runat="server" DataSourceID="sqldata1">

            <LayoutTemplate>
                <div class="newsElenco" id="itemplaceholder" runat="server">
                </div>
            </LayoutTemplate>

            <ItemTemplate>
               <div class="elenco-capo" onclick='<%# "show1(" & incrementafirst(0) & ")" %>' title='<%# eval("nome") %>'>
                <p><%# Eval("nome")%></p>
                <asp:HiddenField ID="hidden1" runat="server" Value='<%# eval("nome") %>' />
               </div>
               
               <div class="elenco-prodotti" id='<%# "ld" & incrementa(0) %>'>
                <asp:SqlDataSource ID="sqldata2" runat="server" ConnectionString="<%$ ConnectionStrings:conn1%>" SelectCommand="select * from [prodotti] where [lang]='ita' and [stato]=1 and [categoria]=@categoria order by [posizione] ASC">
                 <SelectParameters>
                  <asp:ControlParameter ControlID="hidden1" Name="categoria"/>
                 </SelectParameters>
                </asp:SqlDataSource>

                <asp:ListView ID="list2" runat="server" DataSourceID="sqldata2">

                    <LayoutTemplate>
                        <div class="newsElenco" id="itemplaceholder" runat="server">
                        </div>
                    </LayoutTemplate>

                    <ItemTemplate>
                     <a href='<%# "scheda-1.aspx?I_=" & eval("ID_p") %>' title=<%# eval("nome") %>>
                     <p><%# Eval("nome")%></p>
                     </a>
                    </ItemTemplate>

                </asp:ListView>

               </div>
              
            </ItemTemplate>

        </asp:ListView>
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Francesco,
ci sono varie soluzioni ma la più immediata, nel tuo caso, penso sia quella di tener traccia dell'ultimo elemento che hai aperto.

//una variabile in cui memorizzerò il numero dell'ultimo elemento aperto
var ultimoAperto = null;
function show1(objNumber) {

//se non era null, allora vuol dire che c'era un elemento precedentemente aperto
//e la uso per invocare lo slideToggle, che lo chiuderà
if (ultimoAperto != null){
  $("#ld" + ultimoAperto).slideToggle();
}
//mi copio l'objNumber, in modo che alla prossima esecuzione di show1
//saprò qual era l'ultimo elemento aperto
ultimoAperto = objNumber;

//invoco lo slideToggle sull'elemento da aprire
$("#ld" + objNumber).slideToggle();


}


ciao,
Moreno

Enjoy learning and just keep making
404 messaggi dal 09 maggio 2012
Grazie, funziona diciamo per metà. Accade però che cliccando sull'unico elemento aperto per chiuderlo ... non si chiude o meglio si chiude e si riapre subito. Come posso far si che possa anche chiuderli tutti ? Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

drugomatera ha scritto:

Accade però che cliccando sull'unico elemento aperto per chiuderlo ... non si chiude o meglio si chiude e si riapre subito

Giusto. Bisogna anche controllare che l'elemento non sia lo stesso precedentemente aperto.

Prova con questo, ho messo anche un bottone per chiudere tutti gli elenchi, indipendentemente da quale fosse aperto.
http://jsfiddle.net/oqewp2y8/


ciao,
Moreno

Enjoy learning and just keep making
404 messaggi dal 09 maggio 2012
Grazie, sempre di grande aiuto ! Funziona alla grande ;-)

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.