我有一个我正在处理的查询插件,并且在加载了ajax内容之后的某些函数。问题是,假设我重新启动它15次,点击事件将在仅点击一次时触发15次。
有没有办法让它不会堆积?我正在调用addToCart onload,并在ajax返回后调用itemDetail
谢谢!
function addToCart()
{
$(options.add_to_cart).click(function ()
{
event.preventDefault();
var id = $(this).attr('id');
store_item_id_val = id.replace('store-item-id-', '');
var quantity = $('.quantity-' + store_item_id_val);
if (quantity.val() < 1)
{
showError('Please enter a quantity of 1 or more.');
$(quantity).val(1);
return this;
}
$.post($(this).attr('href'),
{ store_item_id: store_item_id_val, quantity: quantity.val() },
function (data)
{
var result = jQuery.parseJSON(data);
renderCart(result);
});
});
return this;
}
function itemDetails()
{
$('.item-details').click(function ()
{
event.preventDefault();
var url = $(this).attr('href');
$.getJSON(url, function (result)
{
$('.modal-title').empty().html(result.title);
$('.modal-content').empty().html(result.html);
$('#modal').slideDown(100);
$('.ui-button').button();
addToCart();
$('.modal-close').click(function ()
{
event.preventDefault();
$('#modal').hide();
});
});
});
答案 0 :(得分:1)
根据您提供的代码,我可能会说您还有一些其他代码正在调用itemDetails()
。每次调用itemDetails()
时,它都会将click
的另一个事件处理程序添加到您的.item-details
。您可能希望改为:
$(document).ready(function()
{
$('.item-details').click(function ()
{
event.preventDefault();
var url = $(this).attr('href');
$.getJSON(url, function (result)
{
$('.modal-title').empty().html(result.title);
$('.modal-content').empty().html(result.html);
$('#modal').slideDown(100);
$('.ui-button').button();
addToCart();
$('.modal-close').click(function ()
{
event.preventDefault();
$('#modal').hide();
});
});
});
});
这会将事件处理程序放在您的.item-details
分类项上,并且只触发事件一次。如果您添加并删除了动态.item-details
,则可能应该使用:
$('.item-details').live('click', function() ...