3.事件冒泡、表单提交4种方法0808

 

1.  Js在浏览器端运行;js相当于ado.net,dom相当于数据库

2. var inputs = document.getElementsByName("input1");//返回NodeList(集合)对象

getElementById在IE中只能拿到表单元素对象,document.getElementById(“divId”),如果页面上有多个相同id元素,则返回第一个

3.  事件冒泡:子元素会触发父级的事件,一直冒泡到最上层的元素

<body οnclick="alert('body')">

    <table οnclick="window.event.cancelBubble()" id ="tab"  > <!--取消冒泡-->

        <tr οnclick="alert('tr')" id="tr"  >

            <td οnclick="alert('td')" id="td"  >aaa</td>

取消事件冒泡:window.event.cancelBubble = true (IE) 
event.preventDefault() (Firefox)

4.事件中的this,谁点出来的方法,那么方法里的this就是谁。this和event.srcElement的语义是不一样的,this就是表示当前监听事件的这个对象,event.srcElement是引发事件的对象:事件冒泡

5.修改元素的样式:cssText,gel("bDiv").cssText="color:green";

修改class属性是用:className

6.案例:文本框为空变红

        var inputs = document.getElementsByName("txtName");

        //alert(inputs instanceof NodeList);//在chrome中返回true,说明inputs不是数组,而是NodeList,IE中不行

for(i=0;i<inputs.length;i++){

                inputs[i].onfocus = check;

                inputs[i].onblur = check;

            }

            function check(){

                    var o = window.event.srcElement;

                    var str = o.value;

                    if(str==""){

                        o.style.backgroundColor="red";

                    }else{

                        o.style.backgroundColor="white";

                    }

            }

7.案例:评分控件

评分控件V1,用一个单行5列的Table做评分控件,监听td的click事件,点击一个td的时候,将这个td及之前的td背景变为红色,之后的td背景变为白色。

    //--------------星星打分-----------

            function gel(id){return document.getElementById(id);}

           

            var tds = gel("tbList").childNodes[0].childNodes[0].childNodes;

            //alert(tds.length);//返回5行

            for(i=0;i<tds.length;i++){

                tds[i].onclick = checkRed;

        }

        function checkRed() {

            var tds2 = gel("tbList").childNodes[0].childNodes[0].childNodes;

            //tds[i].style.backgroundColor = "red";//点击的时候,tds都不存在了!会报错

            var nowTd = window.event.srcElement;

            for (j = 0; j < tds2.length; j++) {//循环所有的单元格

                if (tds2[j] == nowTd) {//找到被点击的单元格

                    for (z = 0; z < tds2.length; z++) {//再次循环所有单元格

                        if (z <= j) {//将所有 下标小于 当前单元格 的单元格 都设置成红色背景

                            //tds2[z].style.backgroundColor = "red";

                            tds2[z].style.cssText = "background-color:red";

                        } else {//将之后的 背景都设置为白色

                            //tds2[z].style.backgroundColor = "white";

                            tds2[z].style.cssText = "background-color:white";

                        }

                    }

                }

            }

        }

8.IE中如果在body上添加onclick、onmousemove等事件响应,那么如果页面没有满,则 “body 中最后一个元素以下(横向不限制)” 的部分是无法响应事件的,必须使用代码在document上监听那些事件

body以下是属于document的范围,document又属于window

9.浏览器兼容:要加上px,动态改变div大小:

<style>

        #divSize{border:1px 100px #aabbcc}

    </style>

    <script type="text/javascript">

        function gel(id){return document.getElementById(id)}

        var timerId;

        window.onload()=function(){

            gel("Change").οnclick=function(){

                timerId = setInterval(changeSize,50);

            }

        }

        function changeSize(){

            var nowWidth = gel("divSize").style.width;

            nowWidth = parseInt(nowWidth);

            if(nowWidth<=500){

                gel("divSize").style.width = (nowWidth+10)+"px";

            }else{

                clearInterval(timerId);

            }

        }

    </script>

</head>

<body>

    <div id = "divSize" style="width:100px;">2011年8月8日22:25:44</div>

    <input type="button" id="Change" value="changeSize" />

</body>

10.表单提交(重点)4中方法

(1) 通过js 代码,阻断表单提交的默认动作。window.event.returnValue = false; (不提倡使用,因为浏览器不兼容)

(2) 在表单中 添加 按钮(button),在按钮的 onclick事件 方法中,调用表单对象的submit()方法,也可以提交表单。document.getElementById("mF").submit();

(3) 为 表单中的 提交按钮(submit) 添加 οnclick="return check();".当方法返回false,表单提交被打断。

function checkName(){

            var strName=document.getElementById("txtName").value;

            if(strName==""){

                //不提交

                alert("请提交用户名");

                return false;

                //window.event.returnValue = false;//打断 提交按钮的默认 提交操作(不提倡使用,因为浏览器不兼容)

            }else{

                return true;

                //提交

                //document.getElementById("mF").submit();

            }

        }

<input type="submit" value="提交" οnclick="return checkName();" />

(4) 为 表单 onsubmit = "return check();".当方法返回false,表单提交被打断。

    如:<form οnsubmit="return checkName()"

function checkName(){

            var strName=document.getElementById("txtName").value;

            if(strName==""){

                //不提交

                alert("请提交用户名");

                return false;

                //window.event.returnValue = false;//打断 提交按钮的默认 提交操作(不提倡使用,因为浏览器不兼容)

            }else{

                return true;

                //提交

                //document.getElementById("mF").submit();

            }

        }

<form οnsubmit="return checkName()">

11.浏览器兼容,非IE中注意event

            var btn = gel("txtName"); //获得按钮对象

            btn.onclick = function (event) {//为按钮对象的点击事件绑定一个匿名方法。为了让火狐浏览器将事件参数传入,专门为该匿名函数 添加了一个 事件参数(IE里没用)

追加事件:非IE浏览器btn.addEventListener(evType,fn,false)//要追加事件的dom元素,要追加的事件名,要追加的方法;IE浏览器btn.attachEvent(“on”+evType,fn)

12.(1)dom元素的操作 insertBefore

            var newBtn = document.createElement("input");

            newBtn.type = "button";

            newBtn.value = "新按钮";

            gel("divC").insertBefore(newBtn, bt);

(2) cloneNode(bool)-复制节点(true-深拷贝(子节点内容也拷贝进去),false-浅拷贝(只拷贝当前节点))

13.TEXT元素(TextNode)

l        document.createTextNode("Hello world!")

l        normalize 合并某一元素下所有的连接的兄弟文本元素

            var textNode= document.createTextNode("Hello world!");

            var tb = gel("bd");

            tb.appendChild(textNode);

            tb.appendChild(document.createTextNode("Hello world!"));

            tb.normalize();

14.DocumentFragment类型(文档片段)

            var bd = gel("bd");

            var fdf = document.createDocumentFragment();

            for (i = 0; i < 10; i++) {

                var d = document.createElement("div");

                d.style.cssText = "border:1px solid #000;height:20px;";

                fdf.appendChild(d);

            }

            bd.appendChild(fdf);

var fdf = document.createDocumentFragment();

文档片段,当在需要将很多dom元素加入dom树时,最好先将dom元素加入到

文档片段对象中,然后一次性将 文档片段 对象加入到dom树。

注意:文档片段对象 本身并不会被添加到dom树中。

15.在js里没有类的概念,平常我们在C#里说的类的概念,在js里就是对象。

    对象的概念,在js里叫对象的实例。

 

在调用方法,实际传递的参数,都是保存在方法的 内部属性arguments中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值