问题
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?
回答1:
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
回答2:
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.
回答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.
回答4:
jQuery 2.0 deprecate the live function. You can find more information in http://blog.jquery.com/2013/04/18/jquery-2-0-released/
来源:https://stackoverflow.com/questions/16543309/jquery-live-works-with-jquery-1-8-3-below-but-not-with-1-9-1-or-2-0