2017-11-14 3 views
1

Wie kann ich den Index des klickbaren Elements finden? Ich würde den Index von li erhalten müssen, als seine Taste geklickt wurde, also kann ich es vom Array löschen.Wie finde ich den Index eines klickbaren Elements bei der Delegierung?

var template = document.querySelector('#template'); 
    this.element.addEventListener('click', function(e) { 
     if(e.target && e.target.nodeName == 'BUTTON' && e.target.className == 'remove') { 
      //var index = ?? 
      //this.deleteTask(index); 
     } 
    }.bind(this)); 


    <script id="template" type="x-tmpl-mustache"> 
     <ul> 
      {{ #tasks }} 
       <li>{{ . }} - <button class="remove">X</button></li> 
      {{ /tasks }} 
     </ul> 
    </script> 

Antwort

1

Wenn Sie @index verwenden, können Sie es auf die Schaltfläche selbst mit einem Datenattribut anhängen, und verwenden Sie dann das:

var template = document.querySelector('#template'); 
this.element.addEventListener('click', function(e) { 
    if(e.target && e.target.nodeName == 'BUTTON' && e.target.className == 'remove') { 
     var index = e.target.dataset.index; 
     // or possibly e.target.getAttribute('data-index'); 
     this.deleteTask(parseInt(index, 10)); 
    } 
}.bind(this)); 


<script id="template" type="x-tmpl-mustache"> 
    <ul> 
     {{ #tasks }} 
      <li>{{ . }} - <button class="remove" data-index="{{ @index }}">X</button></li> 
     {{ /tasks }} 
    </ul> 
</script> 
+0

Sollte diese @index Arbeit aus der Box? Ich kann sehen, es gibt leere Daten-Index auf der Schaltfläche beim Inspizieren Element in devTools so auf Schaltfläche klicken, gibt es nichts auf e.target.dataset. –

+0

verwenden Sie 'Lenker'? oder 'Schnurrbart' selbst? – rossipedia

+0

Ich glaube nicht, dass der Schnurrbart selbst auf den Index zugreifen kann. '@ index' sollte verfügbar sein, wenn Sie einen Lenker benutzen, aber in einem Schnurrbart müssen Sie etwas anderes verwenden, wie eine Schlüsseleigenschaft auf Ihrem Gegenstand oder etwas ähnliches. – rossipedia

Verwandte Themen