Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di Goonie
    Registrato dal
    Sep 2007
    residenza
    Rome/Florence
    Messaggi
    39

    [jquery] liste annidate

    Guru jQuery i need!

    ovvero ho questa situazione
    <div id="menu">
    <ul>
    <li class="leaf" >item
    <li class="leaf" >item
    <li class="fold" >item
    <ul>
    <li class="leaf" >item
    <li class="leaf" >item
    <li class="leaf" >item
    <li class="fold" >item
    <ul>
    <li class="leaf" >item
    <li class="leaf" >item
    <li class="leaf" >item
    <li class="fold" >item <-- clicco su questa -->[/list]
    [/list]

    <li class="fold" >item
    <li class="fold" >item
    <li class="fold" >item
    <li class="fold" ">item[/list]
    </div>



    e la funzione js di jquery che mi deve intercettare l'onclick della classe "fold"

    $(".fold").click(function(event){
    ...
    }

    il problema è che se clicco sul fold più "esterno" come $(this) la funzione intercetta sempre il[*] con classe "fold" che contiente il[*] con la classe "fold" che ho realmente cliccato...

    come faccio a dirgli di prendere in cosiderazione il fold più annidato che c'è?
    PRemetto che le "annidature" possono essere N e non sono fisse.

    Thanks...
    {chickens come home to roost}

    MySite

  2. #2
    Utente di HTML.it L'avatar di Goonie
    Registrato dal
    Sep 2007
    residenza
    Rome/Florence
    Messaggi
    39
    riesumo il mio post e mi autorispondo inquanto sono riuscito a risolvere, può esser utile a qualcuno che ha il mio stesso prob.

    Il problema era che le fold annidate venivano create "on the fly" da una chiamata ajax e inserite come sotto <ul> del[*] padre. Essendo un elemento generato dopo il bind della pagina non veniva considerato da jquery al momento del click del topo il nuovo elemento era "trasparente" e l'evento si generava sul[*] che lo conteneva.

    Risolto utilizzando la nuova funzione live di jquery 1.3

    In questa maniera jquery si "rende conto" anche degli elementi generati dopo il bind della pagina.

    ho sostituito

    $(".fold").click(function(event){

    con

    $("li a").live("click" , function(event){


    Cià
    {chickens come home to roost}

    MySite

  3. #3
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    in realtà .live() permette di agganciare una funzione anche ad elementi che non sono presenti in pagina al momento in cui viene effettuato il binding (ad esempio se aggiungi altri elementi a seguito di una chiamata ajax)

    When you bind a "live" event it will bind to all current and future elements on the page (using event delegation). For example if you bound a live click to all "li" elements on the page then added another li at a later time - that click event would continue to work for the new element (this is not the case with bind which must be re-bound on all new elements).
    il metodo funziona sono incidentalmente (perchè così è stato sviluppato per questa versione)
    e perchè hai cambiato gli elementi a cui associ l'evento (prima avevi agganciato degli[*], adesso hai gestito i link <a>)

    Live events do not bubble in the traditional manner and cannot be stopped using stopPropagation or stopImmediatePropagation.
    per cui usa anche .bind() sugli[*] però devi fermare la propagazione dell'evento

    codice:
    $(".fold").bind("click", function(ev){
    
       // quello che devi fare...
    
       ev.stopPropagation();
     });
    edit: ho letto dopo il tuo ultimo post. Facendo chiamate ajax va bene il metodo .live()
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.