jQuery live()函数

时间:2011-04-04 07:37:32

标签: php jquery ajax json

我遇到了jQuery的live()函数问题。

我正在使用PHP创建购物篮并对php脚本进行json调用以将特定项添加到购物篮中。我没有将点击重新绑定到按钮(标签),而是决定使用live(),但它似乎不喜欢它。

这是我的电话:

if ($('.add_to_basket').length > 0) {
    $('.add_to_basket').live('click', function() {
        var button = $(this);
        var id = $(this).attr("rel");
        $.getJSON("/basket/action/add/id/" + id, function(data) {
            if (!data.error) {
                $('.basket_no_of_items').text(data.no_of_items);
                $('.basket_items_total').text(data.total);
                button.text('Remove from the basket');
            }           
        });
        return false;
    });
}

知道我可能做错了吗?

我已经用firebug检查了它似乎只将请求发布到/ basket / action / add - 没有id位。

3 个答案:

答案 0 :(得分:4)

使用live()的整个想法是在创建函数时在一组元素上注册一个事件(例如,单击)的函数,无论它们是否存在。

添加($('.add_to_basket').length > 0)将检查此特定元素集是否存在。根据我上面的描述,这是适得其反的。所以,要么:

  1. 删除($('.add_to_basket').length > 0),这适用于所有.add_to_basket元素
  2. $('.add_to_basket').live('click', function() {...});更改为$('.add_to_basket').click(function() {...});并使用$(document).ready()将其包裹起来,以确保在功能注册到点击时已加载所有DOM元素。
  3. 希望这是有道理的。

    萨米特

答案 1 :(得分:1)

尝试删除“长度”检查,我敢打赌它干扰了.live()函数。

答案 2 :(得分:1)

更改$.getJSON("/basket/action/add/id/" + id, function(data) {})$.getJSON("/basket/action/add/id/" ,{ pid : id}, function(data) {})