Проверьте, произошло ли событие mousedown () на определенном элементе

1

Я использую эту функцию для обнаружения mousedown() и инициализации перетаскивания содержимого:

        var mouseDown = false;
        var prevCoords = { x: 0, y: 0 };

        $("#mainDiv").mousedown(function() {
            mouseDown = true;
        }).mousemove(function(e) {
            var currentScrollX = $('#mainDiv').scrollLeft();
            var currentScrollY = $('#mainDiv').scrollTop();
            if(mouseDown) { 
                $('#mainDiv').scrollLeft(currentScrollX + prevCoords.x - e.clientX)
                $('#mainDiv').scrollTop(currentScrollY + prevCoords.y - e.clientY)
            };
            prevCoords.x = e.clientX;
            prevCoords.y = e.clientY;
        }).mouseup(function() {
            mouseDown = false;
        });

Но #mainDiv содержит таблицы .foo которые перетаскиваются сами. Как проверить, если mousedown() произошло на таблице .foo? В этом случае mouseDown должен стать false чтобы отменить перетаскивание контента. Я пробовал это, но это не сработало:

        $("#mainDiv").mousedown(function() {
            if($('.foo').mousedown()){
                mouseDown = false;
            }
            else{
                mouseDown = true;
            }
  • 0
    Внутри обработчика клика вы можете отфильтровать, какой дочерний элемент (если есть) вызвал событие, используя, например: if($(event.target).closest('.foo').length) return; и передать event качестве аргумента обработчика, так что try: $("#mainDiv").mousedown(function(event) {if($(event.target).closest('.foo').length) return; //else not: following logic there...});
Теги:
events

1 ответ

3
Лучший ответ

Чтобы проверить, какой элемент вызвал событие, которое пузырился до #mainDiv вы можете проверить target события. Вы также можете сделать логику немного более аккуратной:

$("#mainDiv").mousedown(function(e) {
  mousedown = !$(e.target).closest('.foo').length;
});
  • 1
    Это должно быть: mousedown = !$(e.target).closest('.foo').length;
  • 1
    Правда, это будет охватывать ситуации, когда щелкают ячейки в таблице. Я обновлю, чтобы охватить оба сценария, так как все еще можно щелкнуть таблицу напрямую - например, на границе.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню