0

I've been using http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js for a while now and everything has been fine, but 1.8.3 got quite old so I've decided to move to the latest jQuery. And suddenly a few things stopped working: Quicksand plugin and part of my own jQuery code (that shows additional data under every slide of a slider).

Can you help me figuring out what's wrong? Or maybe it's not worth moving to jQuery versions above 1.8.3? Check the Jsfiddle.

HTML:

<a href="#" class="show" data-show="first">SHOW</a>
<a href="#" class="show" data-show="second">SHOW</a>

<div id="first">First paragraph.</div>
<div id="second">Second paragraph</div>

JS:

jQuery(".show").live("click", function (e) {
    var slide = '#' + jQuery(this).data('show');
    jQuery(slide).slideToggle();
    e.preventDefault();
});

CSS:

div { display: none; }

Here's a working jsfiddle: http://jsfiddle.net/ABrna/

Try changing jQuery to 1.9.1 or 2.0 and hit Run. Script stops working. Why?

Wordpressor
  • 7,173
  • 23
  • 69
  • 108

4 Answers4

4

The .live() method has been deprecated since jQuery 1.7 and has been removed in 1.9.

http://jquery.com/upgrade-guide/1.9/#live-removed

d.garanzha
  • 813
  • 1
  • 9
  • 15
3

As of jQuery 1.7, the .live() method is deprecated. Use .on() to attach event handlers. Users of older versions of jQuery should use .delegate() in preference to .live().

Doc.

moonwave99
  • 21,957
  • 3
  • 43
  • 64
3

Equivalent to .live() using delegation with .on() is:

jQuery(document).on("click",".show", function (e) {
    var slide = '#' + jQuery(this).data('show');
    jQuery(slide).slideToggle();
    e.preventDefault();
});

But you shouldn't set delegation at document level but use instead closest static container.

A. Wolff
  • 74,033
  • 9
  • 94
  • 155
-1

jQuery 2.0 deprecate the live function. You can find more information in http://blog.jquery.com/2013/04/18/jquery-2-0-released/

edonbajrami
  • 2,196
  • 24
  • 34