2016-12-07 4 views
7

Ich verwende jQuery, um ein Datenattribut filtername auf einem onClick zu setzen, das funktioniert gut.Datenattribut gibt undefined zurück

$('#tag-group ul').append('<li><i class="fa fa-times" aria-hidden="true" data-filtergroup="'+filterGroup+'" data-filtername="'+filterName+'"></i>'+text+'</li>'); 

Es macht auf dem Bildschirm heraus ok als

<li><i class="fa fa-times" aria-hidden="true" data-filtergroup="location" data-filtername="Melbourne"></i> Melbourne</li> 

ich dann auf einem anderen onClick wieder zu holen versuchen, aber es kommt wieder als nicht definiert. Wenn ich console log $(this).text(); es funktioniert, aber wenn ich Protokoll loggen $(this).data('filtername'); ist es undefiniert. Versteckt das dom es, wenn es von jQuery generiert wird?

$(document).on('click','#sau-filter-tags ul li', function(event){ 
      var text = $(this).text(); 
      var filterName = $(this).data('filtername'); 
      console.log(filterName); //Undefined 
     }); 
+1

Haben Sie versucht, die Anmeldung '$ (this)', um herauszufinden, was _that_ selbst ist? Es ist kein Element, das irgendwelche "Daten" -Attribute hat. – Xufox

Antwort

7

filtername ist Attribut von i Tag in li.

Sie benötigen i Tag wählen:

$(document).on('click', '#sau-filter-tags ul li i', function(event) { 
    var text = $(this).text(); 
    var filterName = $(this).data('filtername'); 
    console.log(filterName); //Undefined 
}); 

oder müssen Sie Ereignis li befestigen und finde ich in this, Beispiel:

$(this).find('i').data('filtername')

1

Sie den Zugriff auf das Attribut auf enthält <li> anstelle der <i> innen. Versuchen Sie Folgendes:

$('#sau-filter-tags li').on('click', function() { 
 
    var i = $(this.firstElementChild) 
 
    var text = i.text() 
 
    var filterName = i.data('filtername') 
 
    console.log(filterName) //=> 'Melbourne' 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<li><i class="fa fa-times" aria-hidden="true" data-filtergroup="location" data-filtername="Melbourne"></i> Melbourne</li>

2

Sie sind auf i Tag ein Datenattribut Targeting. Also müssen Sie ein Ereignis erstellen auf i

$(document).on('click','#sau-filter-tags ul li i', function(event){ 
    var text = $(this).text(); 
    var filterName = $(this).data('filtername'); 
    console.log(filterName); //Undefined 
});