2016-12-07 124 views
7

我正在使用jQuery在onClick上設置數據屬性filtername,它工作正常。數據屬性返回undefined

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

它呈現出來的畫面OK作爲

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

我然後嘗試再次把它撿起來對另一個的onClick上,但它回來爲未定義。當我console log $(this).text();它的工作原理,但是當我控制檯日誌$(this).data('filtername');它是未定義的。如果它是由jQuery生成的,dom會隱藏它嗎?

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

您是否嘗試過記錄'$(this)'來查明_that_甚至是什麼?它不是具有「數據」屬性的元素。 – Xufox

回答

7

filtername是李i標籤的屬性。

您需要選擇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 
}); 

,或者您需要在this事件附加到裏,找到我,例:

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

1

您正在訪問的屬性您包含<li>而不是<i>裏面。請嘗試以下操作:

$('#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

您在i標籤瞄準數據屬性。所以你必須創建一個事件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 
});