Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Двойное срабатывание функции (https://javascript.ru/forum/misc/57541-dvojjnoe-srabatyvanie-funkcii.html)

webbaster 08.08.2015 09:51

Двойное срабатывание функции
 
Есть функция, которая меняет в поле карточки товара количество по клику + и -
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 запрос.
Вопрос, как решить проблему?

рони 08.08.2015 16:21

webbaster,
ставить клик на котейнер который есть всегда и содержащий .minus .plus и всего один раз а не на .minus .plus
делегирование читать, on использовать.
проблема описана 100500 раз.

рони 08.08.2015 16:23

webbaster,
$('#qvBox').on("click", ".minus ", function () {})

webbaster 08.08.2015 23:29

Большое спасибо, разобрался теперь.


Часовой пояс GMT +3, время: 11:59.