我有这个HTML:
<div id="outsideContainer">
<ul>
<li>Hello</li>
<li>Goodbye</li>
</ul>
</div>
使用jQuery,如何点击任何这些元素执行某个功能?
我有这个,但它不起作用:
$('#outsideContainer').click(function() {
//do stuff
});
有什么想法吗?
答案 0 :(得分:4)
在大多数情况下,这很好。可能的原因不起作用:
您在“outsideContainer”元素存在之前执行JavaScript,例如:
...
<script>
$('#outsideContainer').click(function() {
//do stuff
});
</script>
<div id="outsideContainer">
<ul>
<li>Hello</li>
<li>Goodbye</li>
</ul>
</div>
该元素必须在调用脚本时存在。只需将script
块放在页面的最末端,就在结束body
标记之前,或者将代码包装在传递给jQuery的ready
函数的函数中。
您希望回调中的this
引用li
元素;实际上,它将引用“outsideContainer”div
,因为这是事件处理程序所连接的内容。您可以通过li
event.target
元素
$('#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
内点击。
其他可能值得关注的事情:
答案 1 :(得分:1)
只有在点击整个div时才会触发。
$('#outsideContainer').click(function() {
//do stuff
});
要抓住每个人li
的点击,请执行以下操作:
$('#outsideContainer ul li').click(function() {
//do stuff
});
答案 2 :(得分:0)
如T.J所述。克劳德,你有什么作品,但你想要了解this
的背景。将event.target
替换为this
将为您提供已点击的实际元素。
作为演示,我在下面提供了一个小提琴,它将提示点击元素的节点(标签)类型和文本内容。 <div>
,<ul>
和<li>
都有不同的彩色边框,可帮助您直观地确定实际点击的内容。
答案 3 :(得分:0)
$('outsideContainer ul li').click(function() {
//stuff
});
答案 4 :(得分:0)
我没有包含实际导致问题的javascript(它位于//do stuff
,但我遇到的问题是我正在寻找event.target只是outsideContainer而不是{ {1}}和ul
s。