Event.target и .get() возвращают один и тот же тип, но это не так?

Моя основная цель - предотвратить функцию .click для определенного дочернего объекта. Чтобы добиться этого, я проверяю, является ли выбранный элемент НЕ тем конкретным дочерним элементом.

HTML:

<p class = "participate_session_red">
  <input ...> <label> TEXT </label>
  <span class = "participate_session_more">
  </span>
</p>

jQuery:

$(".participate_session_red").click(function(e){
    if (e.target != $(this).find(".participate_session_more").get())
    {
        $(this).find(".participate_session_more").slideToggle();
    }
});

Поэтому, чтобы проверить, работает ли мой код, я просто использую предупреждение для получения текущего объекта.

alert(e.target); returns that element that was clicked. For example:

[object HTMLParagraphElement],[object HTMLLabelElement],[object HTMLSpanElement], ...

alert($(this).find(".participate_session_more").get()); returns only

[object HTMLSpanElement]

Так что теоретически оба могут возвращать [object HTMLSpanElement], и когда это происходит, мой код все еще выполняется, даже если этого не должно быть.

Результатом get() является массив, поэтому нет смысла напрямую сравнивать его со значением e.target. Вам нужно посмотреть, является ли массив содержит целевым элементом или нет

ADyson 10.04.2019 16:57
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
0
1
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

get() без аргумента возвращает множество. Массив никогда не может быть равен элементу DOM.

Если вы хотите узнать, не является ли e.target совпадающим элементом первый из вашего find, передайте 0 в get:

if (e.target != $(this).find(".participate_session_more").get(0))

В качестве альтернативы вы можете увидеть, содержит ли объект jQuery, возвращаемый find, e.target через index:

if ($(this).find(".participate_session_more").index(e.target) == -1)

Более короткий тест для написания — использовать is() или hasClass(), которые возвращают логические значения.

$(".participate_session_red").click(function(e){
    if (!$(e.target).is('.participate_session_more'))
    {
        $(this).find(".participate_session_more").slideToggle();
    }
});

Другие вопросы по теме