e.preventDefault () и e.stopPropagation () не работают должным образом

1

Данное приложение в основном представляет собой инструмент DOM-инспектор, аналогичный тому, который доступен в Chrome Dev Tools, выполненном с использованием простой JS. В основном, когда пользователь нажимает на атрибуты элемента, такие как имена классов, xpaths и тексты должны быть доступны пользователю. Я столкнулся с проблемой, которая заключается в следующем: когда пользователь нажимает на такой элемент, как ссылка или на кнопку, браузер переходит к намеченной странице. Я попытался предотвратить эту проблему, используя следующий фрагмент кода:

var target = getSelectedElementFromPoint(e.clientX, e.clientY); // target has the element the user wants to inspect
if(target.nodeName.toLowerCase() == "a" || target.nodeName.toLowerCase() == "button"){
        e.stopPropagation(); // e is the event
        e.preventDefault();
 }

Цель кода - получить элемент, на который пользователь нажимает, проверить, является ли он якорным тегом или кнопкой, и если да, остановите событие от дальнейшего развития. Тем не менее, он не работает так, как ожидалось, поскольку при щелчке мыши он по-прежнему перемещается на страницу.

Любая помощь будет оценена по достоинству.

EDIT: Обратите внимание, что я не могу использовать jQuery в этом конкретном экземпляре. Спасибо

EDIT2: Возможно, следовало бы упомянуть об этом раньше, но я забыл. Я на самом деле попытался также return false. Использование return false достигает требуемой функциональности, но единственная проблема заключается в том, что после того, как пользователь покинет "Режим проверки", эта ссылка перестает быть кликабельным и это нежелательно.

В основном, что я хочу, так это то, что когда пользователь переходит в "Режим проверки", чтобы все ссылки были незаметными. И эти ссылки следует щелкнуть после удаления "Режим проверки". Вместо того, чтобы отключать все ссылки на странице, я думал о том, чтобы отключить тот, на который пользователь нажал.

  • 2
    Можете ли вы опубликовать минимальный воспроизводимый пример ? Недостаточно контекста для кода в вопросе.
  • 1
    @CertainPerformance спасибо за ответ :) Конечно, могу, но я не уверен, какая другая информация нужна ...? Не могли бы вы сказать мне, какая часть вы находите неясной, и я мог бы попытаться объяснить дальше? еще раз спасибо
Показать ещё 16 комментариев
Теги:

1 ответ

0

Решение состоит в том, чтобы просто обернуть ваш код в чек для 'inspectMode'. 'inspectMode' должен быть логическим var.

Добавьте следующий код в обработчик событий:

if (inspectMode)
{
    var target = getSelectedElementFromPoint(e.clientX, e.clientY);
    if(target.nodeName.toLowerCase() == "a" || target.nodeName.toLowerCase() == "button")    
    {
        e.stopPropagation(); // e is the event
        e.preventDefault();
        return false;
    }
}
return true;
  • 1
    К сожалению, это также не работает, так как фрагмент кода, который я вставил в вопрос, достигается, только если он находится в режиме инспектора. Таким образом, окружение блоком if будет иметь мало разницы :(
  • 0
    Как вы прикрепляете свой обработчик событий, используете ли вы addEventListener () или назначаете свой Eventlistener напрямую?
Показать ещё 1 комментарий

Ещё вопросы

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