2012-06-13 4 views
2

마크 업 :JQuery와 : 자식 요소에서 가져 오기 데이터

<ul> 
<li><a href="#" class="item-list" data-id="1">Link 1</a></li> 
<li><a href="#" class="item-list" data-id="2">Link 2</a></li> 
<li><a href="#" class="item-list" data-id="3">Link 3</a></li> 
</ul> 

JQuery와에, 내가 링크 1을 선택 것하고 링크 1의 데이터 ID를 가져올 수 있어야합니다. 시도 :

$('.item-list').click(function(){ 
var link = $(this); 
alert($(this).data('id')); 
}); 

결과가 없습니다.

오. 페이지가로드 된 후 목록이 생성됩니다. DB를 쿼리하여 목록을 가져옵니다. 또한 사용자가 dB를 필터링하는 방법에 따라 목록을 변경할 수도 있습니다.

감사합니다.

답변

4

페이지가로드 된 후 목록이 생성되면 .click 바인딩이 작동하지 않을 수 있습니다. 어쩌면 당신과 같이, .live을 시도 할 수 있습니다 :

$('.item-list').live('click', function(){ 
    var link = $(this); 
    alert($(this).data('id')); 
}); 

편집 :

내가 항상 jQuery를 1.7로 :) 잊지하는 것, .live()이되지 않습니다. 당신과 같이 .on()을 사용해야합니다

$("body").on("click",".item-list",function(){ 
    var link = $(this); 
    alert($(this).data('id')); 
}); 
+1

을 작동하는 경우를 참조하십시오 ** .live() **는 더 이상 사용되지 않습니다. **. on() **을 대신 사용하십시오. – Th0rndike

+1

나는 당신의 코멘트 중 편집하고있었습니다 :) – bjornruysen

+0

젠체하는 사람이 DOM에 이벤트를 첨부 한 후 내용이로드 된 경우에 사용하는 잘못된 방법입니다 –

2

사용 CSTE 연구진은 라이브가되지도 document.ready()

$(function(){ //short form of document.ready   
    $("body").on("click",".item-list",function(){ 
     var link = $(this); 
     alert($(this).data('id')); 
    }); 
}); 
+0

내 예제가 내 데이터가 정확히 구성되어 있지 않습니다. .item-list가 테이블에 있다면? –

+0

.item-list가 본문 내부에있을 때까지 아무런 문제가 없습니다. –

0
$('ul').on('click', '.item-list', function() { 
    var link = $(this); 
    alert(link.attr('data-id')); 
}); 

내부에 코드를 삽입하기 때문에 그 JQuery와 1.7 이후

+2

그러면 link.attr ('data-id')가 아닐까요? – akalucas

관련 문제