2017-02-10 2 views
0

Ich bin auf der Suche nach einer Möglichkeit, eine Multilevel-Struktur mit Onclick-Ereignissen in jedem Knoten zu erstellen.Multilevel LI Kaskaden ONCLICK Ereignis

Ich habe den folgenden Code:

<div id="tree"> 
    <ul id="UL1" onclick="alert('LEVEL1');"> 
     <li id="LI1"> 
     LEVEL1 
     <ul id="UL2" onclick="alert('LEVEL2');"> 
      <li id="LI2"> 
       LEVEL2 
       <ul id="UL3" onclick="alert('LEVEL3');">    
        <li id="LI3"> 
        LEVEL3 
        <ul id="UL3" onclick="alert('LEVEL4');"> 
         <li id="LI4" >LEVEL4       
        </ul>     
       </ul> 
     </ul>  
    </ul> 
</div> 

Der Zweck besteht darin, dass, wenn der Benutzer auf dem LEVEL4 (zum Beispiel) klickt er nur eine Warnung für LEVEL4 bekommt. Das Problem ist, dass die Warnung kaskadiert wird, und wenn eine bestimmte Ebene i die Vererbungs alle Benachrichtigungen zu erhalten, klicken auf:

  • Klick auf LEVEL4 -> Benachrichtigungen über LEVEL4, LEVEL3, LEVEL2 und LEVEL1
  • Klick auf LEVEL3 - -> Benachrichtigungen über LEVEL3, LEVEL2 und LEVEL1
  • etc ...

ich suche die Warnung nur für die entsprechende Ebene, die ich angeklickt anstatt den Rest der oberen Ebenen vererben ...

Gibt es einen einfachen Weg, es zu erreichen?

Danke !!

Antwort

2

Verwenden Sie Ereignisdelegierung mit unaufdringlichem Code anstelle von Inline.

Verbinden Sie die eventlistener mit Ihrem übergeordneten Element und verwenden Sie das Objekt target, um das Element zu identifizieren, das das Ereignis ausgelöst hat.

Zum Beispiel:

// Your parent element 
 
var div = document.getElementById("tree"); 
 

 
// Attach the eventlistener to the parent element 
 
div.addEventListener('click', dosomething); 
 

 
// Use the target from the event object that is passed to the handler 
 
function dosomething(e) { 
 
\t console.log("You clicked " + e.target.id); 
 
}
<div id="tree"> 
 
    <ul id="UL1" > 
 
     <li id="LI1"> 
 
     LEVEL1 
 
     <ul id="UL2" > 
 
      <li id="LI2"> 
 
       LEVEL2 
 
       <ul id="UL3" >    
 
        <li id="LI3"> 
 
        LEVEL3 
 
        <ul id="UL3" > 
 
         <li id="LI4" >LEVEL4       
 
        </ul>     
 
       </ul> 
 
     </ul>  
 
    </ul> 
 
</div>

+0

Hallo Abhi, Dank! das war, was ich suchte. Das Problem ist jetzt, dass ich eine jquery Bibliothek (fancytree) benutze, um in der Lage zu sein, die ul/li Struktur in eine nette Baumansicht umzuwandeln ... Irgendwann setzt die Bibliothek die Anzeigeeigenschaft auf NONE für alle UL und dann Ich denke, wo ich die Ereignisbehandlung verliere ... Es wird nichts angezeigt, wenn die display -Eigenschaft auf none gesetzt ist. Gibt es eine Beziehung zwischen dem Elternelement als diplay: none und dem Zuweisen eines Ereignisses? –

+0

@ byle.05 das sollte kein Problem sein. Sie können eine neue Frage mit einem möglichst reproduzierbaren Beispiel stellen. Das wird helfen. – Abhitalks

+1

Danke Abhi, ich konnte es endlich klären. Das Problem ist, dass die Fancy-Tree-Bibliothek meine UL/LI-Struktur durch ihre eigene und meine IDs ersetzt. Ich habe die Bibliothek leicht modifiziert, um diese IDs zu erben und funktioniert jetzt perfekt :) –