我遇到了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位。
答案 0 :(得分:4)
使用live()
的整个想法是在创建函数时在一组元素上注册一个事件(例如,单击)的函数,无论它们是否存在。
添加($('.add_to_basket').length > 0)
将检查此特定元素集是否存在。根据我上面的描述,这是适得其反的。所以,要么:
($('.add_to_basket').length > 0)
,这适用于所有.add_to_basket
元素$('.add_to_basket').live('click', function() {...});
更改为$('.add_to_basket').click(function() {...});
并使用$(document).ready()
将其包裹起来,以确保在功能注册到点击时已加载所有DOM元素。希望这是有道理的。
萨米特
答案 1 :(得分:1)
尝试删除“长度”检查,我敢打赌它干扰了.live()函数。
答案 2 :(得分:1)
更改$.getJSON("/basket/action/add/id/" + id, function(data) {})
到$.getJSON("/basket/action/add/id/" ,{ pid : id}, function(data) {})