Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.08.2015, 09:51
Новичок на форуме
Отправить личное сообщение для webbaster Посмотреть профиль Найти все сообщения от webbaster
 
Регистрация: 08.12.2014
Сообщений: 9

Двойное срабатывание функции
Есть функция, которая меняет в поле карточки товара количество по клику + и -
function changeQty() {

        $('.minus').click(function () {
            al();
            var $input = $(this).parent().find('input[type=text]');
            var count = parseInt($input.val()) - 1;
            count = count < 1 ? 1 : count;
            $input.val(count);
            $input.change();
            return false;
        });
        $('.plus').click(function () {
            var $input = $(this).parent().find('[type=text]');
            $input.val(parseInt($input.val()) + 1);
            $input.change();
            return false;
        });
    }

Есть быстрый просмотр товара, который вызывается по клику на соответствующем блоке
$('.qv').click(function () {
        var regexp = new RegExp(/\S+=/);
        var itemid = $(this).attr('data-link').replace(regexp, '');
        $.ajax({
            url: 'quick-view.html',
            type: 'get',
            async: false,
            data: {itemid: itemid},
            success: function (data) {
                var tt = $('body').scrollTop() + $('html').scrollTop();
                $('#qvBox').css('top', tt + 100).html(data).fadeIn();
                //$('#qvBox').css('top', tt + 100).html(data).addClass('opendBlock');


                $('.xx').click(function () {
                    $('#qvBox').html('').fadeOut();
                    //$('#qvBox').html('').removeClass('opendBlock');

                });
                (function ($) {
                    changeQty();
                })(jQuery);

            }
        })
    });

При этом подгруженный код также содержит изменение количества товара, поэтому функцию changeQty() вставляю после успешного исполнения ajax запроса. Все работает хорошо.
Но, закрывая окно быстрого просмотра, вижу, что теперь на карточке товара + и - прибавляет и вычитает количество товара по 2 единицы.
Если еще раз открою окно быстрого просмотра, то прибавляет по 3 единицы и т.д.
Делаю вывод, что область видимости функции changeQty(), подгруженной при ajax запросе голобальна и при клике на + или - выполняется сначала функция, которая была загружена при загрузке страницы, потом все те, которые подгружены через ajax запрос.
Вопрос, как решить проблему?
Ответить с цитированием
  #2 (permalink)  
Старый 08.08.2015, 16:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

webbaster,
ставить клик на котейнер который есть всегда и содержащий .minus .plus и всего один раз а не на .minus .plus
делегирование читать, on использовать.
проблема описана 100500 раз.
Ответить с цитированием
  #3 (permalink)  
Старый 08.08.2015, 16:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

webbaster,
$('#qvBox').on("click", ".minus ", function () {})
Ответить с цитированием
  #4 (permalink)  
Старый 08.08.2015, 23:29
Новичок на форуме
Отправить личное сообщение для webbaster Посмотреть профиль Найти все сообщения от webbaster
 
Регистрация: 08.12.2014
Сообщений: 9

Большое спасибо, разобрался теперь.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Срабатывание функции по нажатию на checkbox Valentin1918 Общие вопросы Javascript 9 09.11.2016 12:34
двойное срабатывание скрипта в IE malefikus13 Общие вопросы Javascript 2 06.08.2015 11:37
События - focusout и click отменить повторное срабатывание функции egorychmaster Элементы интерфейса 1 25.06.2015 13:35
предотвратить срабатывание функции posta Общие вопросы Javascript 8 05.06.2011 16:37
Двойное срабатывание функции Askhsiv Элементы интерфейса 2 22.06.2010 17:36