переустанавливать плагин jquery после ajax, вызывает события для запуска несколько раз - PullRequest
0 голосов
/ 24 декабря 2011

У меня есть плагин запросов, над которым я работаю, и после загрузки содержимого ajax у меня есть определенные функции.Проблема в том, что, скажем, я повторно запускаю его 15 раз, событие щелчка будет срабатывать 15 раз, когда его нажимают только один раз.

Есть ли способ, чтобы он не накапливался?Я вызываю addToCart onload, а также из itemDetail после возврата ajax

спасибо!

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();
      });
    });
  });

1 Ответ

1 голос
/ 24 декабря 2011

Исходя из предоставленного вами кода, я бы, вероятно, сказал, что у вас есть другой код, вызывающий 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() ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...