我最近将jQuery从1.8升级到2.1.我突然发现.live()停止工作.
我收到了错误TypeError: $(...).live is not a function.
有什么方法可以用来代替.live()吗?
我需要为click未来<div>元素的事件添加一个处理程序,它还不存在.通常情况下,我会使用jQuery的.live函数来处理这个问题,但它现在似乎已被弃用了.on.
要.on以这种方式使用该方法,jQuery建议设置selector参数,以允许创建委托事件,并提供此示例代码:
$("#dataTable tbody").on("click", "tr", function(event){
alert($(this).text());
});
Run Code Online (Sandbox Code Playgroud)
这一切都很好,但是我为他的初始选择器添加了#dataTable tbody什么呢?请注意,$.on()这不起作用.
根据jQuery API(http://api.jquery.com/on/),不推荐使用'live'函数,建议使用'on'代替.但是当我在代码中用'on'替换'live'时,jQuery再也找不到添加的元素了:
这有效(但已弃用):
$('li.bibeintrag').live('click', function(){
alert('myattribute =' + $(this).attr('myattribute'));
});
Run Code Online (Sandbox Code Playgroud)
这是来自'on'的API的示例:
$("#dataTable tbody tr").on("click", function(event){
alert($(this).text());
});
Run Code Online (Sandbox Code Playgroud)
当我将我的代码更改为此('live'替换为'on')时它不再起作用(jQuery将找不到以后添加的元素(例如with append)):
$('li.bibeintrag').on('click', function(){
alert('myattribute =' + $(this).attr('myattribute'));
});
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?有人可以帮帮忙吗?
如上所述http://api.jquery.com/live/:
从jQuery 1.7开始,不推荐使用.live()方法.使用.on()附加事件处理程序.
对.而不是
$('.dynamicallyCreatedElement').live('click', function(){
console.log('click');
});
Run Code Online (Sandbox Code Playgroud)
我应该用:
$('.dynamicallyCreatedElement').on('click', function(){
console.log('click');
});
Run Code Online (Sandbox Code Playgroud)
但是,它不会将事件绑定到on()调用后创建的元素.那么它真的更好live()吗?
我错过了什么吗?
我用于live()生成的页面和框架.但是在jQuery 1.9此函数中已弃用且不起作用.
我使用on()而不是,live()但这种方法工作一次,并不在帧中工作.
我的代码看起来像这样:
$("#element").live('click',function(){
$("#my").html(result);
});
Run Code Online (Sandbox Code Playgroud)
解决办法是什么?
我知道.live()现在已经弃用但我似乎无法改变它并保留功能.
我只是对.on()jQuery中的函数有一个快速的问题.我现在在这里使用.live()
像这样:
$('table tr th').live("click", function() {
});
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试.live()用.on()它替换它不再像它应该的那样工作时.
我试过投入
$('table tr th').on("click", function() {
});
Run Code Online (Sandbox Code Playgroud)
以及
$('table tr').live("click", "th", function() {
});
Run Code Online (Sandbox Code Playgroud)
和
$('table tr').delegate("th", "click", function() {
});
Run Code Online (Sandbox Code Playgroud)
但无济于事.
为什么这样做以及我可以采取哪些步骤使其正常工作?
//解决方案:我只是简单地替换了四次出现,如建议的批准答案和不显眼的ajax插件已启动并再次使用jquery 1.9.0
更新//观察底部标记答案的注释,这是解决此问题的最佳方法.
//原帖:我升级到jQuery 1.9.0,但随后不引人注意的ajax插件因为他们弃用了live方法而失败了.我试图像这样替换它,因为升级修复了我的另一个错误.但是,它不起作用.我只是简单地用以下方式取代了:
$("a[data-ajax=true]").on("click", function (evt) {
evt.preventDefault();
asyncRequest(this, {
url: this.href,
type: "GET",
data: []
});
});
$("form[data-ajax=true] input[type=image]").on("click", function (evt) {
var name = evt.target.name,
$target = $(evt.target),
form = $target.parents("form")[0],
offset = $target.offset();
$(form).data(data_click, [
{ name: name + ".x", value: Math.round(evt.pageX - offset.left) },
{ name: name + ".y", value: Math.round(evt.pageY - offset.top) }
]);
setTimeout(function () {
$(form).removeData(data_click);
}, 0);
});
$("form[data-ajax=true] :submit").on("click", function (evt) {
var name …Run Code Online (Sandbox Code Playgroud) jquery 1.9.0中没有live()函数,但jquery.unobtrusive.ajax.js已经使用了这个函数.
我应该使用旧版本的jquery还是其他方式?
我的Web框架自动将我的jQuery脚本更新为当前的最新版本1.9.
现在我的全部:
$(".myclass").live("click", function() {...
Run Code Online (Sandbox Code Playgroud)
不再工作了.我主要使用它与一些ajax调用,在我的页面中填充html.
我会知道如何在上一版本中替换此功能.一位朋友告诉我使用"on"代替,但"on"仍然固定在同一个元素上.
解释,在这个例子中(没有ajax),我使用"+"图标来显示"ul li list".
$(".closed").live('click', function(){
$("#ul_list_"+$(this).attr('id')).addClass("displayed").removeClass("hidden").show();
$(this).addClass("openned").removeClass('closed');
$(this).html('<i class="icon-minus"></i>');
});
$(".openned").live('click', function(){
$("#ul_list_"+$(this).attr('id')).addClass("hidden").removeClass("displayed").hide();
$(this).addClass("closed").removeClass('openned');
$(this).html('<i class="icon-plus"></i>');
});
Run Code Online (Sandbox Code Playgroud)
(我知道脚本不是最优化的,但它确实有效.我使用类来打开或关闭我的列表.如果访问者没有启用JS,则不会隐藏任何内容,所有折叠列表都会打开)
笔记:
我有一个场景,JQuery'on'和'live'不会执行相同的操作.也许有人可以指出原因.我在我的项目中使用JQuery 1.7.2,在这个版本中,'live'已被'on'取代.我在列表页面中使用以下代码.基本上,此页面有一个字母栏,用户可以单击该栏并将加载具有该姓氏的所有客户端.我想通过ajax执行链接.
码:
$("a.listajax").on("click", function (e) {
e.preventDefault();
var url = $(this).attr("href");
$("div.content").load(url + " div.content");
return false;
});
Run Code Online (Sandbox Code Playgroud)
这里的问题是,当我第一次加载页面并单击链接时,一切正常.页面通过ajax加载.但是,之后所有的链接都失去了绑定,然后如果我点击任何链接,我会加载整个页面.
我将'on'替换为'live',并且链接开始表现完美,即使在后续点击中也是如此.
我错过了什么?
jquery ×10
javascript ×3
deprecated ×2
function ×1
jquery-1.8 ×1
jquery-1.9 ×1
jquery-on ×1
live ×1