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

时间:2011-11-06 14:53:28

标签: javascript jquery

我该怎么做?

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 个答案:

答案 0 :(得分:12)

您可以使用.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(); 
  }

});

答案 1 :(得分:5)

尝试 -

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

the_element[0]应该解包你的jQuery对象并返回一个'普通'DOM对象,然后你可以将它与event.target返回的DOM对象进行比较。

答案 2 :(得分:-2)

也许我错了,但看起来没有人理解这个问题?...我也想知道如何获取JQUERY OBJECT,我使用了来自EVENT.TARGET的侦听器函数,但不是一个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 ) );

答案 3 :(得分:-2)

实际上,我发现了另一种方式,更方便一个:) 只需要使用数据参数:

  

事件发生时要在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;
...
}