E.12: Use noexcept when exiting a function because of a throw is impossible or unacceptable E.12: 当不可能或不愿意通过抛出异常退出函数时使用...因为这段代码有不会抛出异常的操作构成,所以我们知道compute函数不会抛出异常。通过将compute函数定义为noexcept,我向编译器和代码的读者传递了可以让它们更容易理解和维护代码的信息。...很多标准库函数被定义为noexcept,包含所有从C标准库继承的标准库函数。...不要使用传统的例外定义方式。 See also(参见) discussion. 课题讨论。
总结来说就是: 当一个元素接收到事件的时候 会把他接收到的事件传给自己的父级,一直到window。 如果它的父级元素也有某个事件函数,当执行完它的事件函数后,也就会执行它父级的事件函数。...提示: 可以使用 document.removeEventListener() 方法来移除 addEventListener() 方法添加的 事件句柄。...提示:使用 element.addEventListener() 方法为指定元素添加事件句柄。...描述了事件触发后执行的函数。 当事件触发时,事件对象会作为第一个参数传入函数。事件对象的类型取决于特定的事件。例如, “click” 事件属于 MouseEvent(鼠标事件) 对象。...布尔值,指定事件是否在捕获或冒泡阶段执行。 可能值: true - 事件句柄在捕获阶段执行 false - 默认。
addEventListener('事件' , 要执行的函数) 事件监听三要素 事件源:哪个dom元素被事件触发了 事件:用什么方式触发 事件调用的函数 :要做什么事 例如: // 给元素注册上事件...函数是点击之后再去执行,每次点击都会执行一次 事件监听版本 DOM L0: 事件源.on事件 = function(){} 例如: // 绑定事件DOM L0 // 缺点:会出现覆盖现象...(回头再调用的函数) 如果将函数A作为参数传递给函数B时,我们称A为回调函数 即:当一个函数当作参数来传递给另外一个函数的时候,这个函数就是回调函数 // 回调函数:把一个函数当成参数传递给另外一个函数...('button') btn.addEventListener('click', function () { // 点击时改变按钮颜色 /...,this 指向事件源(即被触发的事件 btn) console.log(this) }) 排他思想 干掉所有人,复活我自己 事件发生时,只有我自己生效,其他所有都不生效
事件:事件是用户或浏览器自身执行的某种动作,如 click,load 和mouseover 都是事件的名字。响应某个事件的函数叫做事件处理函数 / 事件处理程序 / 事件句柄。...结论: 对于addEventListener,如果给目标的同一个事件绑定多个处理函数,先绑定的先执行。...假如outA、outB、outC都注册了click类型事件处理函数,当点击outC的时候,触发顺序是A–>B–>C,还是C–>B–>A呢?...,当点击outC的时候,打印顺序是3–>2–>1。...比如说只有点击li才会触发,不怕,我们有绝招: 事件本身是一个对象,即Event对象,事件发生时该对象作为参数传给回调函数。
目前也都支持事件捕获,但是由于老版本的浏览器不支持事件捕获,因此很少有人使用事件捕获。...alert("is clicked"); } 点击按钮会调用showMsg()函数,事件处理程序的代码在执行时,有权访问全局作用域的任何代码。...var btn = document.getElementById("btn"); btn.onclick = function(){ alert('cliked'); } dom0级方法制定的事件处理程序被认为是元素的方法...IE中的事件对象 在使用DOM0级方法添加事件时,event对象可以作为window对象的一个属性存在,使用attachEvent添加事件处理程序的时候,event对象会作为参数传入事件处理函数中 dom.onclick...>)中的一个或多个字符时 resize 当浏览器窗口被调整到一个新的高度或者宽度时,会触发 scroll 当用户滚动带滚动条的元素中的内容时,在该元素上触发resize,scroll会在变化期间重复被激发
在这个过程中,默认情况下,事件相应的监听函数是不会被触发的。 事件目标:当到达目标元素之后,执行目标元素该事件相应的处理函数。如果没有绑定监听函数,那就不执行。...); }, true); 上面的方法中,参数为true,代表事件在捕获阶段执行。...); 说明: (1)第一个接收到事件的对象是 window(有人会说body,有人会说html,这都是错误的)。...事件冒泡 事件冒泡: 当一个元素上的事件被触发的时候(比如说鼠标点击了一个按钮),同样的事件将会在那个元素的所有祖先元素中被触发。...说明 onclick 事件是可以冒泡的 } 阻止冒泡 大部分情况下,冒泡都是有益的。当然,如果你想阻止冒泡,也是可以的。可以按下面的方法阻止冒泡。
对于这个答案中的第二次输出结果,有人生出了疑惑:为什么 parent 事件触发时,e.target.id 的结果为 child呢?不应该是 parent 吗?...] 事件捕获和事件冒泡 当一个事件发生在具有父元素的元素上(例如,在我们的例子中是 child 元素)时,现代浏览器运行两个不同的阶段 - 捕获阶段和冒泡阶段。...在冒泡阶段,恰恰相反: 浏览器检查实际点击的元素是否在冒泡阶段中注册了一个onclick事件处理程序,如果是,则运行它 然后它移动到下一个直接的祖先元素,并做同样的事情,然后是下一个,等等,直到它到达<...阻止冒泡 假如有以下代码: parent.onclick = function1; child.onclick = function2; 当我们点击 child 时,由于事件默认会在冒泡阶段注册...问题2:如果点击 parent 元素,输出是什么? 可以看到,现在 parent 的点击事件是冒泡阶段执行,child 的点击事件是在 捕获阶段执行。
什么是事件 一种 触发—响应 的机制; 用户的行为 + 浏览器感知(捕获)到用户的行为 + 事件处理程序 事件三要素: 事件源:(被)触发事件的元素 事件类型:事件的触发方式(例如鼠标点击或键盘点击...> 获取节点对象,然后 修改 节点对象 的 属性 onclick 的值,值是一个 匿名函数 即可; 以上两种事件绑定方式,需要在事件名称前加 on ; 事件监听(节点对象方法) ...但是处理函数中的 this 指向的选中的对象; 第三种:addEventListener方法可以针对同一个元素的同一个事件,添加多个监听处理函数。...当点击div1时,触发 事件1,但是,紧跟着,事件2和事件3也被触发了; 这种现象,我们称为 事件冒泡 在JS中当一个事件发生以后,它会在不同的DOM节点之间传播。...;i++){ //为每个图片元素注册点击事件,添加事件处理函数 imgObjs[i].onclick=function () { alert("啊,我被点击了");
// useCapture :是否使用捕捉,一般用 false,事件触发时,会将一个 Event 对象传递给事件处理程序。...取消事件:可取消的事件对象可以与一个或多个“默认动作”相关联。要取消事件,请调用该preventDefault()方法。 一个图片 ?...() { console.log('s2 冒泡方式') },false) 点击li时,打印 依次为 ul clicked li clicked 点击s1时,打印依次为 s1 捕获方式...= true; //否则,我们需要使用IE的方式来取消事件冒泡 } } 当需要阻止默认事件时 function stopDefault( e ) { if ( e && e.preventDefault...} return false; } 最后的解决方法: 让我们回顾一下最初的问题,可能部分浏览器把事件的useCapture默认为true,导致点击子元素时父元素的事件先响应了,于是我的办法是在父元素的事件里进行判断
文档加载结束 事件处理程序 我上面已经简单提到过,事件处理程序就是我们如何响应事件的方法。它是事件发生时执行的一块代码。... 我们为按钮绑定了一个事件,当点击它时打印一条消息。...第二个参数就是一旦点击时执行的回调函数 浏览器知道用户什么时候点击了按钮,同时为有类名 btn-primary 的按钮注册了一个事件,然后执行相关的事件处理程序,将会打印: The button was...clicked 回调方法是一个匿名函数,它不能被其它地方引用。...注意:若addEventListener中为了捕获使用了 true,那removeEventListener时也要使用相同的值。
: 回调函数,当事件触发时,函数会被注入一个参数为当前的事件对象 event useCapture: 默认是 false,代表事件句柄在冒泡阶段执行 // 例2 var btn = document.getElementById...UI事件,当用户与页面上的元素交互时触发,如:load、scroll 焦点事件,当元素获得或失去焦点时触发,如:blur、focus 鼠标事件,当用户通过鼠标在页面执行操作时触发如:dblclick、mouseup...滚轮事件,当使用鼠标滚轮或类似设备时触发,如:mousewheel 文本事件,当在文档中输入文本时触发,如:textInput 键盘事件,当用户通过键盘在页面上执行操作时触发,如:keydown、keypress...合成事件,当为IME(输入法编辑器)输入字符时触发,如:compositionstart 变动事件,当底层DOM结构发生变化时触发,如:DOMsubtreeModified 同时 DOM3 级事件也允许使用者自定义一些事件...借助事件代理,我们只需要给父容器ul绑定方法即可,这样不管点击的是哪一个后代元素,都会根据冒泡传播的传递机制,把容器的click行为触发,然后把对应的方法执行,根据事件源,我们可以知道点击的是谁,从而完成不同的事
事件是某个行为或者触发,比如点击、鼠标移动..... 当用户点击鼠标时 当网页已加载时 当图像已加载时 当鼠标移动到元素上时 当用户触发按键时......("click",fn) //点击btn事件,执行函数fn cancel.addEventListener("click",function(){ btn.removeEventListener...("click",fn) }) //点击cancel事件,执行删除btn的绑定事件 通过removeEventListener()函数来移除事件处理程序时,移除时的参数必须与添加处理程序时使用的参数相同...(添加的方法少的时候大多是按添加顺序的反顺序执行的,但是添加的多了就无规律了),所以添加多个的时候,不依赖执行顺序的还好,若是依赖于函数执行顺序,最好自己处理,不要指望浏览器。...>这里是元素前添加一个新元素,内容为用户输入的非空字符串;当点击结尾添加时在最后一个 li 元素后添加用户输入的非空字符串;(2)当点击每一个元素li时控制台展示该元素的文本内容。
事件机制的组成 通过上面的实例,我们可以抽象出一个事件机制有三个组成部分: 1.事件源:即事件的发送者;(比如上例中的门铃) 2.事件:事件源发出的一种信息或状态;(比如上例中的门被敲响,代表有人拜访)...那么当td的click事件发生时,会先走红色的「capture phase」: Document (实际被点击的元素) 由上而下依序触发它们的...事件监听 EventTarget.addEventListener() addEventListener()基本上有三个参数,分别是「事件名称」、「事件的处理程序」(事件触发时执行的function),...使用这种方式来注册事件的好处是:同一个元素的同种事件可以绑定多个函数,按照绑定顺序执行。...出现: "卡卡罗特" "贝吉塔" 事件代理 在实际的开发当中,利用事件流的特性,我们可以使用一种叫做事件代理的方法。
有传统方式和方法监听方式 传统方式 利用 on 开头的事件,如 onclick, 同一个元素同一个事件只能设置一个处理函数,出现多个处理函数的话,后面的会覆盖前面的。...() { console.log(1); }); //结果:1, 1 此处是个人见解: 当两个监听函数一样时,由上可发现会输出两次 1,这个其实是因为上面两个匿名函数看似一样...= () => alert(3); document.onclick = () => alert(4); //点击按钮后,弹出顺序1、2、3、4 addEventListener(type...不需要传递实参 注册事件时,event 对象会被系统自动创建,并依次传递给事件监听器(事件处理函数)。...("click", (e) => { alert(1); e.stopPropagation(); //只要在事件处理函数里使用就会执行完这个函数,才阻止冒泡。
实例 当点击id为i3的时,浏览器会依次弹出2 1 0。 <!...实例 当点击id为i3的时,浏览器会依次弹出0 1 3 2,addEventListener方法的第三个参数为声明绑定的事件为捕获型还是冒泡型,默认为false,也就是冒泡型。 <!...注意 绑定监听事件使用的区别 在DOM0中直接绑定函数执行时,后定义的函数会覆盖前边绑定的函数,下面这个例子只执行alert(1)而不执行alert(0)。...click()是一个对象事件,点击即触发onclick()绑定的方法,onclick()是对象的属性,将其绑定函数后即为click()事件触发后执行的方法。 时绑定的捕获阶段还是冒泡阶段执行。
当子节点被点击时,click 事件向上冒泡,父节点捕获到事件后,我们判断是否为所需的节点,然后进行处理。其优点在于减少内存消耗和动态绑定事件。...这时,如果我们需要在事件处理函数运行之后获取事件对象的属性,可以使用 React 提供的 e.persist() 方法,保留所有属性: // 只修改 handleChange 方法,其他不变 function...也就是说,在 React 合成事件中,需要阻止冒泡时,可以使用 e.stopPropagation() 或 e.preventDefault() 方法来解决,另外还可以使用 e.nativeEvent.stopImmediatePropagation...在 React 中,一个组件只能绑定一个同类型的事件监听器,当重复定义时,后面的监听器会覆盖之前的。...举一个实际案例:实现点击空白处关闭菜单的功能:当菜单打开时,在 document 上动态注册事件,用来关闭菜单。 点击菜单内部,由于不冒泡,会正常执行菜单点击。
当子节点被点击时,click 事件向上冒泡,父节点捕获到事件后,我们判断是否为所需的节点,然后进行处理。其优点在于减少内存消耗和动态绑定事件。...函数 阻止默认行为方式 事件返回 false 使用 e.preventDefault() 方法 [Native-Event-VS-Synthetic-Event.png] 三、React 事件与原生事件执行顺序...也就是说,在 React 合成事件中,需要阻止冒泡时,可以使用 e.stopPropagation() 或 e.preventDefault() 方法来解决,另外还可以使用 e.nativeEvent.stopImmediatePropagation...在 React 中,一个组件只能绑定一个同类型的事件监听器,当重复定义时,后面的监听器会覆盖之前的。...举一个实际案例:实现点击空白处关闭菜单的功能: 当菜单打开时,在 document 上动态注册事件,用来关闭菜单。 点击菜单内部,由于不冒泡,会正常执行菜单点击。
两个阶段:先捕获在冒泡 捕获阶段是 从父到子 冒泡阶段是 从子到父 事件冒泡 当一个元素的事件被触发时,同样的事件将会在该元素的所有祖先元素中依次被触发。...,后面注册的事件会覆盖前面注册(同一个事件) 直接使用null覆盖就可以实现事件的解绑 都是冒泡阶段执行的 // 需求:按钮的点击事件只能触发一次 // 解绑事件 // 解绑语法: 元素.onclick...btn.onclick = null } 事件监听注册(L2) 语法: addEventListener(事件类型, 事件处理函数, 是否使用捕获) 后面注册的事件不会覆盖前面注册的事件(同一个事件...) 可以通过第三个参数去确定是在冒泡或者捕获阶段执行 必须使用removeEventListener(事件类型, 事件处理函数, 获取捕获或者冒泡阶段) 匿名函数无法被解绑 // addEventListener...} btn.addEventListener('click' , fn) 滚动事件 当页面进行滚动时触发的事件 事件名: scroll 给 window 或 document 添加 scroll
方法监听注册方式 w3c 标准 推荐方式 addEventListener() 它是一个方法 IE9 之前的 IE 不支持此方法,可使用 attachEvent() 代替 特点...(type, listener[, useCapture]) eventTarget.addEventListener()方法将指定的监听器注册到 eventTarget(目标对象)上,当该对 象触发指定的事件时...eventTarget(目标对象) 上,当该对象触 发指定的事件时,指定的回调函数就会被执行。...该方法接收两个参数: eventNameWithOn:事件类型字符串,比如 onclick 、onmouseover ,这里要带 on callback: 事件处理函数,当目标触发事件时回调函数被调用...事件对象的使用 事件触发发生时就会产生事件对象,并且系统会以实参的形式传给事件处理函数。 所以,在事件处理函数中声明1个形参用来接收事件对象。
当这些事件出现时,系统会发出信号,并提供一种机制,允许你自动执行某些操作(比如运行代码)。这些事件通常是在浏览器窗口内触发的,关联到其中的特定元素。...这通常是你作为程序员编写的 JavaScript 函数,它会在事件发生时被执行。当你定义了一个代码块来响应该事件时,我们称之为注册事件处理器。...; }; onclick事件处理器在用户单击按钮时被触发,随后通过 alert() 函数显示一条消息。...添加事件监听器 使用 addEventListener()方法来添加事件监听器,可以接受三个参数: 事件类型(字符串,例如 'click')。 事件处理函数。...这种方法虽然有效,但并不推荐使用,它会使代码的结构较为混乱。 onclick="alert('按钮被点击了!')">点击我!
领取专属 10元无门槛券
手把手带您无忧上云