@BEST1306
Software engineer

Как определить, что клик/тап(IOS), произошел в не конкретного элемента(ов)?

Всем доброго дня,
есть самописный дропдавн, прри клике на инпут появляться список. при появлении списка к нему добавляется объект который следит за кликами мыши. На десктоп браузерах всё работает отлично, а вот в на мобильном Safari, отрабатывает не так, моментально закрывает.
Вот код объекта который следит за мышью:
// Detects when user clicks outside of specified element.
function ClickOutsideTracker() {
    var isMouseOver = null;
    var element;
    var onClickOutside;

    this.assign = function(_element, _onClickOutside) {
        isMouseOver = false;
        element = _element;
        onClickOutside = _onClickOutside;

        element.mouseenter(function () {
            isMouseOver = true;
        }).mouseleave(function () {
                isMouseOver = false;
            });

        if (isIOS()) {
            $(document.body).click(globalOnClickHandler);
            ?
        } else {
            $(document.body).mousedown(globalOnClickHandler);
        }
        return this;
    };

    function globalOnClickHandler() {
        if (!isMouseOver) {
            onClickOutside();
        }
    }

    this.unassign = function() {
        element.off("mouseenter");
        element.off("mouseleave");
        if (isIOS()) {
            $(document.body).off("click");
        } else {
            $(document.body).off("mousedown");
        }
    }
}
  • Вопрос задан
  • 3254 просмотра
Пригласить эксперта
Ответы на вопрос 2
pxz
@pxz
✔ Совет: Вам помогли? Отметьте ответы решением.
В общем, Вам нужен обработчик для всех кликах на странице, далее, Вы уже проверяете, по тому элементу произошёл клик (а также на его потомках) или вне его.
$(document).on('click', function(event) {
  if(!($(event.target).closest(element).size() > 0 || $(event.target).is(element))) {
    console.log('Click outside');
  } else
    console.log('Click inside on',event.target);
});


Возможно, говнокод. Будет здорово, если кто-то укажет на недочёты.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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