Задать вопрос
Kekemeke
@Kekemeke
Пародия на программиста.

Как отключить все ОСТАЛЬНЫЕ обработчики на элементе js/битрикс?

В общем вешаю свой обработчик на кнопку увеличения/уменьшения кол-ва товара, при определенном условии вылезает алерт и по сути нужно не изменять кол-во, НО битриксу(а может в целом js) пофигу что идет return false(event.preventDefault()/event.stopImmediatePropagation()) он все равно выполняет другие handler повешаные на эти элементы(а именно увеличивает/уменьшает кол-во).

Ну и собственно вопрос - как отключить все ОСТАЛЬНЫЕ обработчики?
И стоит отметить:
Проблема как раз в том, чтобы эти эвенты выключились только при достижении моего условия, т.е. мой обработчик сработал, и не дал другим обработчикам на этом элементе сработать(в данный момент у меня срабатывает алерт, но потом идут все остальные обработчики которые понавешаны).

А если же человек после этого нормально все ввёл(в данном случае кол-во товара), то мой обработчик возвращает true, и остальные как ни в чем не бывало работают.

Для битриксоидов:
Также пытался юзать BX.denyEvent/BX.allowEvent тоже непомолго, как и реализация обработчика через BX.bind
$(document).ready(function() {

    function checkInputsQuantity($elem){
        let prevQuantity = $elem.data('val'),
            totalCount = 0;

        $('.basket-item-amount-filed').each(function(){
            totalCount += Number($(this).val());
        });

        if (totalCount > 50){
            return false;
        }

        return true;
    }

    $(document).on('change','.basket-item-amount-filed', function () {
        if (!checkInputsQuantity($(this))){
            //BX.unbindAll($(this)[0]);

            alert('Невозможно заказать более 50 упаковок, при таком заказе просим обратиться напрямую к нашим специалистам по телефону +7 (342) 213-69-40');
            return false;
        }
    });

    $(document).on('click', '.basket-item-amount-btn-plus, .basket-item-amount-btn-minus', function (e) {
        if (!checkInputsQuantity($(this).parents('.basket-item-block-amount').find('input'))){
            let el = $(this)[0];
            //BX.unbindAll($(this)[0]);
            alert('Невозможно заказать более 50 упаковок, при таком заказе просим обратиться напрямую к нашим специалистам по телефону +7 (342) 213-69-40');
            //setTimeout("BX.allowEvent(el,'click');",1000);
        }
    });
});
  • Вопрос задан
  • 877 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
like-a-boss
@like-a-boss
Признайся,тебяТянетНаКодМужика,ты—программный гей
Чтобы обработчик можно было снять, нужно передавать ссылку на функцию при его установке
function f(event) {..}

$(document).on('click', f); // установили

$(document).off('click', f); // сняли
Ответ написан
Kekemeke
@Kekemeke Автор вопроса
Пародия на программиста.
В общем пришлось костыльнуть.
Если кому вдруг интересно будет, склонировал элемент, а настоящий скрыл. При клике по клону идет нужная мне проверка, и если условие TRUE, то инициирую клик по оригиналу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы