event.target和.get()返回相同的类型,但是不是吗?

时间:2019-04-10 14:54:53

标签: jquery

我的主要目标是防止特定子对象上的.click函数。 为此,我检查一下clicked元素是否不是那个特定的孩子。

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获取当前对象。

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

[对象HTMLParagraphElement],[对象HTMLLabelElement],[对象HTMLSpanElement],...

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

[对象HTMLSpanElement]

因此从理论上讲,两者都可以返回[object HTMLSpanElement],并且即使发生这种情况,我的代码仍然可以执行。

2 个答案:

答案 0 :(得分:1)

没有参数的

get()返回数组。数组永远不能等于DOM元素。

如果要查看e.target中的find不是 first 匹配元素,请将0传递到get

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

或者,您可以通过index查看find返回的jQuery对象是否包含e.target

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

答案 1 :(得分:1)

一个简短的测试方法是使用同时返回布尔值的is()hasClass()

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