你真的知道js吗?(二)
来源:广州中睿信息技术有限公司官网
发布时间:2012/10/21 23:25:16 编辑:editor 阅读 460
这个是关于事件冒泡的。这是一个简单的事件冒泡,首先我们放几个div。代码如下。<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//E

这个是关于事件冒泡的 。

这是一个简单的事件冒泡,首先我们放几个div。代码如下。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script type="text/javascript">
        window.onload = function () {
        }
        function change() {
            alert("change");
        }
        function change1() {
            alert("change1");
        }
        function change2() {
            alert("change2");
        }
    </script>
    <style type="text/css">
        #content{ width:500px; height:500px; border:1px solid green;}
        #content1{ width:300px; height:300px; position:absolute; top:50px; left:50px; border:1px solid red;}
        #content2{ width:200px; height:200px; position:absolute; top:50px; left:50px; border:1px solid blue;}   
        </style>
</head>
<body>
<div id="content" onclick="change();">
<div id="content1" onclick="change1();">
<div id="content2" onclick="change2();">我爱北京天安门</div>
</div>
</div>
</body>
</html>
这个代码似乎看起来没什么问题。但是我们知道,absolute是绝对定位,所谓的绝对是相对于浏览器可视区域的左上角。

但是真正的布局却成了这样,我们的content2是position:absolute; top:50px; left:50px; 和content1一样,按照常理来说应该content2和content1的坐标原点也就是左上角应该是重合的。

这里要注意这点,反正我是菜鸟也没什么原理性的知识来解释这个问题。我只能说父容器的绝对定位影响到了子容器。

其实事件冒泡有2中方式,这种特性提现在火狐浏览器上面。这个在下面再说。

我们现在要实现这样一个功能

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script type="text/javascript">
        function change1() {
            alert("change1");
        }
        function change2() {
            alert("change2");
        }
        function change3() {
            alert("change3");
        }
        function change() {
            document.getElementById("content2").innerHTML = "<input type='text'><input type='button' value='增加'/><input type='button' value='删除'/>"
        }
    </script>
    <style type="text/css">
        #content{ width:500px; height:500px; border:1px solid green;}
        #content1{ width:300px; height:300px; position:absolute; top:50px; left:50px; border:1px solid red;}
        #content2{ width:200px; height:200px; position:absolute; top:50px; left:50px; border:1px solid blue;}   
        </style>
</head>
<body>
<div id="content" onclick="change1();">
<div id="content1" onclick="change2();">
<div id="content2" onclick="change3();">我爱北京天安门<input type="button" value="修改" onclick="change();"/></div>
</div>
</div>
</body>
</html>
当我们点击修改按钮的时候,我们 content2的内容变成了2个文本框2个按钮。

当我们点击修改的时候会出现我们想象的结果,但是大家仔细想象,我们的冒泡怎么不在了 ,按照代码的样子,我们点击修改的时候不但会触发onclick事件,同时会触发oncliclk3、oncliclk2、oncliclk1事件,但是为什么我们点击的时候不会触发呢 。

我们说事件冒泡一般情况下是是从dom树的事件源的子节点向根节点逐步触发的。当我们点击按钮的时候,触发事件的真正的源头就消失不见了。

我们可以这样理解,就像我们说老大让小弟去干什么事情,但是突然老大死了,小弟们就都闪了。

但是当我们点击我们新添加的dom树的节点里面的所有标签的时候仍然会触发父节点的冒泡,这个时候我们就需要去阻止冒泡。

阻止事件冒泡:在ie下面我们用window.event,cancelBubble=true来阻止,在FF中我们用event.prevent.Default()来阻止冒泡。

这个时候我们就可以对我们添加的innerHTML中的标签来添加一个事件,用这个事件去执行这些代码。

由于刚刚喝了一点酒,思路不是很清晰。其实这个事件冒泡我们还可以写到父节点中,没必要为每个input标签去添加这么一个阻止事件冒泡的代码。这里我就不多写了,早点睡了。

希望大家看到这里能学到一点点东西,其实做程序的主要还是得自己多写代码自己多练。

联系我们CONTACT 扫一扫
愿景:成为最专业的软件研发服务领航者
中睿信息技术有限公司 广州•深圳 Tel:020-38931912 务实 Pragmatic
广州:广州市天河区翰景路1号金星大厦18层中睿信息 Fax:020-38931912 专业 Professional
深圳:深圳市福田区车公庙有色金属大厦509~510 Tel:0755-25855012 诚信 Integrity
所有权声明:PMI, PMP, Project Management Professional, PMI-ACP, PMI-PBA和PMBOK是项目管理协会(Project Management Institute, Inc.)的注册标志。
版权所有:广州中睿信息技术有限公司 粤ICP备13082838号-2