将event.target与现有的jQuery对象进行匹配

11

我该怎么做?

event.target 返回一个HTML对象,

而我的元素是jQuery对象。

除了比较ID或类别,有没有更好的方法来找出是否 event.target = my_jquery_object?

我想确保它是同一个对象,而不仅仅是具有类似类别的元素...

我试过用 $(event.target) !== the_element,但是失败了

the_element 在开头被定义为$('.something', $(this))


我想做的是在用户点击盒子之外时关闭它,但条件是点击不是在打开盒子的链接上进行的。

所以我有以下代码:

$(document).click(function(event){
  if(($(event.target).parents().index(box) == -1) 
    && box.is(':visible')){
      close(); 
  }

});

我想添加另一个条件来验证点击并不是在打开盒子的链接上点击的。

这个可以工作,但我不喜欢它:

if($(event.target).attr('id') != the_element)

:)

4个回答

13

你可以使用 .get(0) 或者简单地使用 the_element[0] 从jQuery中获取实际的DOM元素。不过最好还是使用jQuery进行检查。

if (the_element.is(event.target))
{
    ...
}

以您的示例为例:

$(document).click(function(event){
  if (the_element.is(event.target)) {
      return false;
  }
  if(($(event.target).parents().index(box) == -1) 
    && box.is(':visible')){
      close(); 
  }

});

5

尝试 -

if(event.target === the_element[0])

the_element[0]应该解除封装您的jQuery对象并返回一个“常规”的DOM对象,然后您可以将其与event.target返回的DOM对象进行比较。


-2
也许我错了,但似乎没有人理解这个问题?... 我也想知道如何从EVENT.TARGET获取我使用监听器函数的JQUERY对象,而不是一个DOM节点作为jquery对象!!)) 所以...我找到了一个不太方便但可行的解决方案:
var elem = $('<input type="text" class="input" />');
elem.focus( $.proxy( function( e )
{
    this.onInpFocus( e, elem );
}, this ) );

并修改了监听器的回调方法以接收2个参数:
onInpFocus : function( e, inp )

不要使用简单的方式,例如:

elem.focus( $.proxy( this.onInpFocus, this ) );

-2

实际上,我找到了另一种更方便的方法 :) 只需要使用data参数:

当事件被触发时,将数据传递给处理程序中的event.data。

现在我的代码看起来像这样:

var inp = $('<input type="text" />');
inp.focus( { j : inp } , $.proxy( this.onInpFocus, this ) );

//and the handler method
onInpFocus : function( e )
{
var inp = e.data.j;
...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接