2011-06-15 46 views
0

我有这样的HTML:如何选择多个元素来捕捉JavaScript单击事件?

<div id="outsideContainer"> 
<ul> 
<li>Hello</li> 
<li>Goodbye</li> 
</ul> 
</div> 

使用jQuery我怎么会说,当任何这些元素被点击执行一定的功能?

我有这个,但没有奏效:

$('#outsideContainer').click(function() { 
//do stuff 
}); 

任何想法?

+1

这应该很好地工作......看到这个小提琴:http://jsfiddle.net/interdream/jUysR/ – 2011-06-15 19:02:33

+0

没什么错在这里,你是什么意思你的问题的标题是复杂的: ? – Synxmax 2011-06-15 19:07:24

+0

只是想出了什么是错的...我正在寻找event.target只是'outsideContainer'而不是'ul'和'li's – chromedude 2011-06-15 19:08:58

回答

0

我不包括实际上导致的问题(这是在//do stuff的JavaScript,但我是有我一直在寻找的event.target是问题只是outsideContainer代替ulli小号

4

大多数情况下没问题。可能的原因是行不通:

  1. 你执行你的JavaScript中的“outsideContainer”元素存在之前,例如:

    的元素必须存在的,当脚本调用的。您可以将script区块放在页面的最后,就在关闭body标签之前,或者将代码包装到您传递给jQuery的ready函数的函数中。

  2. 您期待着您的回调中的this指向li元素;实际上,它会引用“outsideContainer”div,因为这就是事件处理程序所关注的内容。您可以通过event.targetli元素得到:

    $('#outsideContainer').click(function() { 
        // here, this is the raw "outsideContainer" element 
        // and event.target is the raw element that was clicked 
    }); 
    

    请注意,根据您的边距和填充,event.target可能是ul元素,如果你的ul内,但不是在li点击。

其他的东西,可能是值得考虑的:

  • delegate - 钩容器上的事件但jQuery的过滤你得到这取决于到底点击了哪个孩子的事件。
  • live - 基本文件范围delegate
+0

感谢,间接帮助我,因为我正在寻找的event.target只是'outsideContainer'而不是'ul'和''的 – chromedude 2011-06-15 19:08:02

+0

@chromedude:LOL!我没有考虑过这种情况。你可能想看看我添加的链接,尽管听起来像你现在在那里。 – 2011-06-15 19:11:04

1

这只会在点击整个div时触发。

$('#outsideContainer').click(function() { 
    //do stuff 
}); 

要捕捉点击每一个人li做:

$('#outsideContainer ul li').click(function() { 
    //do stuff 
}); 
0

正如T.J.注意克劳德,你有什么作品,但你会想知道this的背景。用event.target代替this会给你点击的实际元素。

作为演示,我在下面提供了一个小提示,它将提醒点击元素的节点(标签)类型和文本内容。 <div>,<ul><li>都具有不同的彩色边框,以帮助您直观地确定您实际点击的内容。

Live demo ->

0
$('outsideContainer ul li').click(function() { 
//stuff 
});