JS 事件监听、冒泡和捕获、鼠标事件、表单事件、转义符号、offsetLeft和left的区别

1.事件监听:

<button>点我</button>

    <script>

        let btn = document.querySelector('button');

        /* 点击三下分别 alert出现 123 */

       /*  btn.onclick=function(){

            alert(1)

        }

        btn.onclick=function(){

            alert(2)

        }

        btn.onclick=function(){

            alert(3)

        } */

        /* 监听onclick事件 */

        /* 和onclick区别,事件不会被覆盖 */

        window.addEventListener('click',function(){

               alert(1)

        })

        window.addEventListener('click',function(){

               alert(2)

        })

        window.addEventListener('click',function(){

               alert(3)

        })

    </script>

2.冒泡和捕获:

<div onclick="alert(1)" class="div1">

        <div onclick="alert(2)" class="div2"></div>

    </div>

    <script>

        /* 点击子元素 会把父元素的事件也调用 */

        let div1 = document.querySelector('.div1')

        let div2 = document.querySelector('.div2')

        /* div1.onclick = function(){

            alert(1)

        }

        div1.onclick = function(){

            alert(2)

        } */


        /* false就表示冒泡   从里到外触发事件*/

        /* true表示捕获   从外到里触发事件*/

        div1.addEventListener('click', function (){

           alert(1)

        },/* false */true)

        div2.addEventListener('click', function (e){

             /* 兼容写法 ,谷歌ie都支持*/

             let eObj = e || event

             /*或者 eObj.stopPropagation */

             /*或者 eObj.cancelBubble = true  都能阻止冒泡*/

            /* event是一个JS的关键字,这个关键字变量保存了事件源对象的属性 */

            console.log(event);

            /* 事件源对象 */

            console.log(e);

            e.stopPropagation()  

            /* 阻止事件冒泡的方法 */

            e.cancelBubble = true

            /* 取消冒泡属性 */

           alert(2)

        },/* false */true)

    </script>

3.鼠标事件:

<h1 style="background-color: beige;">点我一下</h1>

    <script>

        let h1 = document.querySelector('h1');

        /* 鼠标双击 */

        /* h1.ondblclick = function (){

            alert('我双击了')

        }

        h1.addEventListener('dblclick',function(){

            alert('我双击了')

        }) */


        /* 鼠标在指定的区域移动激活事件 */

        h1.onmousemove = function (){

            console.log("我移动了");

        }

        h1.addEventListener('mousemove',function(){

            alert('我双击了')

        })

    </script>

4.表单事件:

<form action="">

        <p>

            用户名:<input type="text"  onblur="bluFn()" name="username" id="user">

        </p>

        <p>

            选择跑车:

            <select name="carname" id="car" onchange="changFn()">

                <option value="奔驰">奔驰AMG</option>

                <option value="宝马">宝马M4</option>

                <option value="雪佛兰">大黄蜂</option>

            </select>

        </p>

        <input type="submit" value="提交" id="submitId">

        <input type="reset"  value="重置" id="reseId">

    </form>

    <script>

        let user = document.getElementById('user')

        /* onfocus 获取焦点 */

        user.onfocus = function(){

            user.style.backgroundColor = 'yellow'

        }

        /* onblur 元素失去焦点 */

        function bluFn(){

            user.style.background = "#FFF"

        }

        /* onchange 用户改变域的内容 */

        let car = document.getElementById('car');

        function changeFn(){

            console.log(1);

            alert(car.childNodes[1].innerHTMl)

            //value是后台所需要的值,如果想传给后台,需把value属性上

            //写上你需要传的值

        }

        /* onreset */

        let reseId = document.querySelector('resetId')

        let formId = document.querySelector('formId')

        resetId.onreset = function (){

            console.log('重置');

        }

        /* onreset 使用这个事件除了默认的可以清除表单外还可以做一些 清除表单之后的

        事情,比如把输入的背景色改回来 */

        /* onsubmit事件不支持input,支持form事件 */

        formId.onreset = function (){

            console.log('重置');

            user.style.background = ''

        }

    </script>

表单事件练习:

<!-- 写一个表单 有用户名和密码

    输入框 获得焦点的时候 框内的文字颜色变红

    输入框 失去焦点的时候 框内的文字颜色变黑

    选择框 选择男女 默认男

    修改的时候触发 alert 出()你选的性别

    提交 alert 出 我提交了 reset alert 出我重置了 -->

    <form action="" method="get" id="formId">

        <p>

            用户名:<input type="text" onblur="blurFn()" name="username" id="user">

        </p>

        <p>

            选择跑车:

            <select name="carname" id="car" onchange="changeFn()">

                <option value="0">奔驰AMG</option>

                <option value="1">宝马M4</option>

                <option value="2">大黄蜂</option>

            </select>

        </p>

        <p>

            性别:

            <!-- \ 转义在这里无效 -->

            <input type="radio" name="1" id="nan" value="男" onclick="radioFn('男')"> 男性

            <input type="radio" name="1" id="nv" value="女" onclick="radioFn('女')"> 女性

        </p>

        <input type="submit" value="提交" id="submitId"> |

        <input type="reset" value="重置" id="resetId">

    </form>

    <script>

        /* 写一个表单 有密码框 */

        /* 输入框 获得焦点的时候 框内的文字颜色变红 */

        /* 输入框 失去焦点的时候 框内的文字颜色变黑 */

        /* 选择框 选择 男女 默认男 */

        /* 修改的时候触发 alert出你选的性别 */

        /* 提交 alert 我提交了 reset alert 我重置了 */

        let user = document.getElementById('user');

        let car = document.getElementById('car');

        let resetId = document.getElementById('resetId');

        let formId = document.getElementById('formId');

        let submitId = document.getElementById('submitId');

        let nan = document.getElementById('nan');

        let nv = document.getElementById('nv');

        function radioFn (val){

            alert(val)

        }

        /* onsubmit 表单提交事件不支持input标签,支持form标签*/

        formId.onsubmit = function (){

            alert('我提交了')

        }

        /* onreset 表单重置事件不支持input标签,支持form标签*/

        // resetId.onreset = function (){

        //     console.log('重置')

        // }

        /* onreset 使用这个事件 除了默认的可以清除表单外

        还可以做一些 清除表单之后的事情 ,比如把输入的背景色改回来  */

        // formId.onreset = function (){

        //     console.log('重置')

        //     user.style.background = ''

        // }

        /* onchange  用户改变域的内容 */

        function changeFn (){

            alert(car.value)

            // alert(car.childNodes[1].innerHTML)

            /* value值是后台所需要的值 如果想传给后台 请把value属性上 写上你需要传的值 */

        }

        /* onfocus 获取焦点 */

        user.onfocus = function (){

            // user.style.background = 'yellow'

            user.style.color = 'red'

        }

        /* onblur 元素失去焦点 */

        function blurFn(){

            // user.style.background = 'red'

            user.style.color = ''

        }


    </script>

5.转义符号:

<div id="div1" style="width: 200px;height: 200px;border:1px solid #ccc">

    </div>

    <script>

        div1.onclick = function(){

            /* \ 转义符 \" 把" 当作一个字符串 */

            // div1.innerHTML = "<h1 style=\"color:red;\">我是div</h1>"

            // div1.innerHTML = "<h1 style='color:red;'>我是div</h1>"

        }

    </script>

6.offsetLeft和left的区别:

<div id="div1" style="margin:5px;width: 200px;height: 200px;background-color: aqua;">

        <div id="aa" style="margin:10px;width: 100px;height: 100px;background-color:bisque;"></div>

    </div>

    <script>

        /*offsetLeft不可以设置  */

        // aa.offsetLeft = 90;

        console.log(aa.offsetLeft);

        /* 没有清除内外边距的情况 */

        /* 在标准文档流下 aa.offsetLeft(18)= aa.marginLeft(10) + body.marginLeft(8) */

        /* 清除内外边距后 aa.offsetLeft(10)= aa.marginLeft(10)*/

        /* 清除内外边距后 外层div 设置了margin

         aa.offsetLeft(15)= aa.marginLeft(10) + div.marginLeft(5)*/

         /*offsetLeft返回的是数字类型 number类型  */

         /* 脱离文档流下 aa.offsetLeft(30) = aa.marginLeft(10) + aa的left值(20) */

        // console.log( aa.offsetLeft );

        /* 脱离文档流下 aa的left(20) = aa的left(20) 不包括 aa.marginLeft的值*/

        /* 在标准文档流下 aa的left的值是auto */

        /* aa.style.left 返回的是字符串 并且带有px单位 */

        // console.log( aa.style.left );

        // console.log(aa);

        // console.log( window.getComputedStyle(aa,null).left );

        /*  aa.style.left/top是可读可写的 但是 offsetLeft只可以读取*/

    </script>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • 事件监听 点我 let btn =document.querySelector('button');...
    冲锋敢死曾小贤阅读 131评论 0 0
  • 表单事件: onfocus 获取焦点 onblur 元素失去焦点 onchange 用户改变域的内容(value值...
    af5e2949dafd阅读 91评论 0 0
  • ECMAscript 基础语法 变量 数据类型 运算符 数组 函数 对象 BOM 浏览器对象模型 window对象...
    浅笑_阅读 211评论 0 0
  • 十二、JavaScript的DOM特效 在web浏览器上,window对象是一个全局对象,代表web浏览器中一个打...
    刘远舟阅读 365评论 0 1
  • CSS CSS3 布局属性 标签的权值为1,类选择符的权值为10,ID选择符的权值最高为100 !importan...
    53cfdb355418阅读 413评论 0 0