제이쿼리 기초문법 live 질문입니다.
본문
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>sample16</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$('a').live('click',function(){
$('img').attr({'src':$(this).attr('href')}).attr({'alt':$(this).text()});
return false;
});
$('button').click(function(){
$('ul').append('<li><a href="building.jpg">건물</a></li>');
});
});
</script>
</head>
<body>
<button>li 요소를 추가</button>
<ul>
<li><a href="flower.jpg"> 꽃</a></li>
<li><a href="sea.jpg"> 바다</a></li>
<li><a href="jellyfish.jpg"> 해파리</a></li>
</ul>
<p><img src="flower.jpg" alt=" 꽃" /></p>
</body>
</html>
위 원문입니다.
앞으로 추가될 태그에 이벤트 처리를 설정할 수 있는 live() 를 배우고 있는데요. -.-;;;
위 원문에서 live대신에 그냥 on으로 바꾸고 버튼을 클릭하면 일단 태크는 추가가 됩니다..
그런데, on 대신에 live로 바꾸면
콘솔오류가 발생됩니다..
sample16.html:11 Uncaught TypeError: $(...).live is not a function
at HTMLDocument.<anonymous> (sample16.html:11)
at i (jquery.min.js:2)
at Object.fireWith [as resolveWith] (jquery.min.js:2)
at Function.ready (jquery.min.js:2)
at HTMLDocument.J (jquery.min.js:2)
위 콘솔을 뵈면 해당 html파일 즉, sample16.html 파일의 11번째 줄에 있는 live가 function이
아니라는 말인데요..
저 원문에서 live가 11번째 줄에 있습니다.
제이쿼리 버전을 최신이나 다른 버전으로도 바꿔봐도 계속 상기에 있는 콘솔오류가 납니다..-.-;;
책이 잘못된 것인지...사실, 1년전에 공부했던 책으로 다시 복습중인데
그때는 안그랬는데. 지금은 이런 오류들이 발생됩니다.
원인이 무엇인가요..? -.-;;;
!-->
답변 5
https://api.jquery.com/live/#live-events-handler
1.7 버전에서 deprecated되었다가 1.9 버전에서 완전히 removed됩니다.
지금 사용하시는 버전이 1.12.4니까 live 메소드는 작동 안 하는 게 정상입니다.
여담으로 jquery 1.7 이전에는 live, bind 따로 사용을 했는데 그 이후로 on 메소드가 저 둘의 기능을 합쳐서 나왔습니다.
그래서 지금은 live, bind 이런 건 쓰실 필요가 없고 on만 사용하시면 됩니다.
live 메소드를 계속 사용하시려면 jquery는 1.7 이하로 사용하셔야 합니다.
보시면 j쿼리 1,3에 추가되어서 1.8버전에 삭제되었다고 나오네요.
그 사이 버전을 사용하시거나, 아니면 대체함수를 사용하셔야 합니다
live 는 jquery 1.9 버전부터 폐지되었습니다
on 으로 사용하시고 꼭 live 를 사용하시려면 jquery 1.9 이하버전으로 사용하세요
1.12 버전대에서는
live() 대신 on()을 쓰셔야 합니다.
문법도 조금 다르니, 찾아보시기 바랍니다.
live는 더이상 상위 버전에서는 지원하지 않습니다.
on으로대체 되었습니다.
on을 사용하세요.