+ -
当前位置:首页 → 问答吧 → 晕了,this和event.target的区别是什么啊

晕了,this和event.target的区别是什么啊

时间:2009-07-21

来源:互联网

请问this和event.target有什么区别,比如:
$("li:has(ul)").click( function(event){$(this).children().show() });
    和  
$("li:has(ul)").click( function(event){$(event.target).children().show() });
这两句话有什么区别

作者: 4875580   发布时间: 2009-07-21

事件是可以向上传播的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事件的DOM元素

举例来说,假设你的li里有个span元素,然后你单击了这个span元素,处理事件时,this是li,event.target是span

作者: keakon   发布时间: 2009-07-22

keakon :
我还是不太理解你说的,我直接把全部代码都贴出来吧:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>New <div>s Example</title>
<script type="text/javascript" src="jquery-1.2.1.js"></script>
<script type="text/javascript">
$(
function(){
$("li:has(ul)").children().hide();
$("li:has(ul)").toggle( function(event){$(this).children().show(); return false;} ,function(event){$(this).children().hide();return false; });
}

);
</script>
</head>
<body>
<fieldset>
<li>Item 1</li>
<li>Item 2</li>
<li>
Item 3
<ul>
<li>Item 3.1</li>
<li>
Item 3.2
<ul>
<li>Item 3.2.1</li>
<li>Item 3.2.2</li>
<li>Item 3.2.3</li>
</ul>
</li>
<li>Item 3.3</li>
</ul>
</li>
<li>
Item 4
<ul>
<li>Item 4.1</li>
<li>
Item 4.2
<ul>
<li>Item 4.2.1</li>
<li>Item 4.2.2</li>
</ul>
</li>
</ul>
</li>
<li>Item 5</li>
</ul>
</fieldset>
</body>
</html>


在toggle方法里用的都是$(this),很奇怪的是,比如说点击 Item 3.1 ,Item 3列表也会缩回,但是Item 3.1不包含在$("li:has(ul)")里啊,所以没有对其添加事件监听啊。
另外,如果将toggle方法里的$(this)都换成$(event.target)的话,就没有任何问题了,仅仅对$("li:has(ul)")里的元素添加了事件监听。

这是怎么回事情呢???

作者: 4875580   发布时间: 2009-07-22

你点击Item 3.1时,Item 3.1没有绑定click事件,所以向上传播给父元素Item 3,因此Item 3会缩回

这个传播过程直到遇到根元素或手动停止(如return false)

你虽然使用了return false,但因为Item 3.1没有绑定click事件,所以不能阻止事件向上传播

作者: keakon   发布时间: 2009-07-22

啊~这么回事情啊 我终于明白了 太感谢你了 keakon   !!!   :)

作者: 4875580   发布时间: 2009-07-22

相关阅读 更多