类型错误: $(...).live 不是一个函数。

9

我遇到了一个关于jquery 1.9.1的问题。我已经搜索过了,但是这些并没有解决我的问题。

    $('.sm2_expander').live('click', function() {
    $(this).parent().parent().toggleClass('sm2_liOpen').toggleClass('sm2_liClosed');
    return false;
});

大家都说要使用 'on' 函数,但是这次我的代码却无法正常工作。

$(document).on("click", "a.offsite", function(){ alert("Goodbye!"); }); 

编辑:这是我使用的项目页面:可拖拽链接


2
$(".sm2_expander").live("click",func)on 版本是 $(document).on("click",".sm2_expander",func)。不知道你从哪里得到了 "a.offsite" - John Dvorak
2
你能分享一下 HTML 吗? - Arun P Johny
需要更多信息。可能使用http://jsfiddle.net来解释问题。 - Prasanna
6个回答

15
在你的示例中,你使用了选择器a.offsite,但在你的页面中没有匹配这个选择器的元素。这可能是它无法工作的原因。
$(function(){
    $(document).on('click', '.sm2_expander', function(){
        alert('bye');
        $(this).parent().parent().toggleClass('sm2_liOpen').toggleClass('sm2_liClosed');
    })
})

我认为你可以缩短这个

$(function(){
    $(document).on('click', '.sm2_expander', function(){
        $(this).closest('li').toggleClass('sm2_liOpen sm2_liClosed');
    })
})

谢谢。这是我的解决方案。 - Enes Pekkaya

9

.live()是在jQuery 1.3中引入的,因此它无法与早期版本一起使用。

.live()自jQuery 1.7起被弃用。

替代方法是.on()和.delegate()

请参见相关问题jQuery 1.9 .live()不是一个函数,以了解如何迁移现有代码。

我使用了"jquery-1.8.3.min.js",我的问题得到了解决。


6
尝试这个:- http://jsfiddle.net/trdb9/ JS:
$(document).on("click", "a.offsite", function () {
    alert("Goodbye!");
});

HTML:-

<a class="offsite">Click Me</a>

谢谢您的回复,但它并没有起作用。示例页面是:boagworld.com/demos/sitemap - Enes Pekkaya
您的演示网站正在使用jQuery 1.3版本。 - Aditya Singh

3
你需要使用jquery-migrate-1.1.1.min.js版本或更高版本。我猜想在jquery中即将发生重大变化,其中之一就是要求依赖.live的人寻找新的方法。
无论如何,请尝试这样做,它应该可以工作。

2
尝试在您的代码中将live替换为on
 $('.sm2_expander').on('click', function() {
    $(this).parent().parent().toggleClass('sm2_liOpen').toggleClass('sm2_liClosed');
    return false;
});

谢谢您的回复,但它并没有起作用。示例页面为:http://boagworld.com/demos/sitemap/。 - Enes Pekkaya

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接