Javascript 在ajax之后重新初始化jquery插件,会导致多次触发事件

Javascript 在ajax之后重新初始化jquery插件,会导致多次触发事件,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我有一个正在开发的查询插件,在加载ajax内容后,我会使用某些函数。问题是,假设我重新启动它15次,那么单击事件将在只单击一次时触发15次 有没有办法不让它一直堆积起来?我正在调用addToCart onload,也在ajax返回后从itemDetail调用 谢谢 function addToCart() { $(options.add_to_cart).click(function () { event.preventDefault(); var id = $(this

我有一个正在开发的查询插件,在加载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();
      });
    });
  });
函数addToCart()
{
$(选项。将\添加到\购物车)。单击(函数()
{
event.preventDefault();
var id=$(this.attr('id');
store_item_id_val=id.replace('store-item-id-','');
变量数量=$('.quantity-'+存储项标识值);
if(quantity.val()<1)
{
淋浴器(“请输入一个或多个数量”);
$(数量).val(1);
归还这个;
}
$.post($(this.attr('href'),
{store\u item\u id:store\u item\u id\u val,数量:quantity.val()},
功能(数据)
{
var result=jQuery.parseJSON(数据);
renderCart(结果);
});
});
归还这个;
}
函数itemDetails()
{
$('.item details')。单击(函数()
{
event.preventDefault();
var url=$(this.attr('href');
$.getJSON(url、函数(结果)
{
$('.modal title').empty().html(result.title);
$('.modal content').empty().html(result.html);
$('模态')。向下滑动(100);
$('.ui button').button();
addToCart();
$('.modal close')。单击(函数()
{
event.preventDefault();
$('#model').hide();
});
});
});

基于您提供的代码,我可能会说您有其他一些代码调用
itemDetails()
。每次调用
itemDetails()
时,它都会为
单击添加另一个事件处理程序。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() ...

一个好的开始是展示你的代码,否则我们也没有什么可以回顾来提出建议。