博客列表 >JS基本语法8:实例演示事件冒泡与事件委托 \实例演示表单常用事件与默认行为禁用方式

JS基本语法8:实例演示事件冒泡与事件委托 \实例演示表单常用事件与默认行为禁用方式

茂林
茂林原创
2024年01月07日 16:33:271181浏览

一、实例演示事件冒泡与事件委托

1.事件冒泡

事件由内向外,逐级向上传递,直到根元素
事件冒泡可以被禁用:ev.stopPropagation()

  1. <body>
  2. <!-- 事件冒泡 -->
  3. <div>
  4. <button>点击</button>
  5. </div>
  6. <script>
  7. /* 事件冒泡
  8. 子级触发事件,父级同名事件触发执行
  9. 每个上级都有同名事件,事件从子级触发后会一级一级向上传递并触发
  10. */
  11. document.querySelector("button").onclick = function () {
  12. // console.log(this)
  13. console.log("1:" + this.tagName)
  14. }
  15. document.querySelector("div").onclick = function () {
  16. // console.log(this)
  17. console.log("2:" + this.tagName)
  18. }
  19. document.body.onclick = function () {
  20. // console.log(this)
  21. console.log("3:" + this.tagName)
  22. }
  23. document.documentElement.onclick = function () {
  24. // console.log(this)
  25. console.log("4:" + this.tagName)
  26. }
  27. /*
  28. 1:BUTTON
  29. 2:DIV
  30. 3:BODY
  31. 4:HTML
  32. */
  33. </script>
  34. </body>

2.事件委托

事件主体:
子级上的事件,会自动传递到低级上的同名事件:冒泡
所有可以将原来需要添加到子级元素上的事件,直接委托到父级元素上执行
有2部分组成—父子关系

  1. 1.事件绑定主体:被添加了事件属性的元素 <ul>
  2. ` this=== ev.currentTarget`
  3. 2.事件触发的主体:用户实际点击的元素<li>
  4. ` ev.target`
  1. <ul>
  2. <li>item1</li>
  3. <li>item2</li>
  4. <li>item3</li>
  5. <li>item4</li>
  6. <li>item5</li>
  7. </ul>
  8. <script>
  9. /* 实现的功能:
  10. 单击li元素,显示出当前点击li的内容
  11. */
  12. /* const li = document.querySelectorAll("li")
  13. li.forEach(function (item) {
  14. item.onclick = function () {
  15. console.log(item.textContent)
  16. }
  17. }) */
  18. /* 根据事件冒泡原理,li.onclick 必然会在ul.onclick上触发
  19. ev:表示事件对象
  20. 事件对象参数:要么传“事件对象”,要么不要传参数
  21. */
  22. const ul = document.querySelector("ul")
  23. ul.onclick = function (ev) {
  24. console.log(ev.target.textContent)
  25. console.log(ev.currentTarget === this) //true
  26. console.log(ev.currentTarget)
  27. console.log(this)
  28. }
  29. // 事件委托:事件主体不是主体元素
  30. /*
  31. 事件主体:有2部分组成
  32. 1。事件绑定主体:被添加了事件属性的元素 <ul>
  33. this=== ev.currentTarget
  34. 2。事件触发的主体:用户实际点击的元素<li>
  35. ev.target
  36. */
  37. </script>
  38. </body>

二、实例演示表单常用事件与默认行为禁用方式

5.1 常用事件

  1. submit: 提交
  2. focus: 焦点
  3. blur: 失去焦点
  4. change: 值改变,且失去焦点时
  5. input: 值一旦改变就触发, 不等失去焦点

5.2 禁用表单默认提交行为的 3 种方法

  1. form.onsubmit = 'return false'
  2. form.button.type = 'button'
  3. event.preventDefault():禁用默认行为
  1. <body>
  2. <!-- 禁用表单提交的方式:
  3. 1. 在form 元素添加onsubmit事件属性禁止提交 onsubmit="return false" -->
  4. <!-- <form action="login.php" method="post" id="login" onsubmit="return false"> -->
  5. <form action="login.php" method="post" id="login">
  6. <label class="title">用户登录 </label>
  7. <label for="email">邮箱:</label>
  8. <input type="email" id="email" name="email" value="" autofocus />
  9. <label for="password">密码:</label>
  10. <input type="password" id="password" name="password" value="" />
  11. <!-- 2. 在button 按钮的type默认属性修改成 button,也能禁用表单的提交行为 -->
  12. <button type="submit">登录</button>
  13. <!-- <button type="button">登录</button> -->
  14. </form>
  15. <script>
  16. /* //submit事件:默认提交进执行
  17. 3. 通过添加事件方法来 禁止提交表单 事件方法可用前面的事件属性表示 */
  18. /* const form = document.forms.login
  19. form.onsubmit = function () {
  20. // alert("上传")
  21. return false
  22. } */
  23. /*
  24. 禁用表单提交行为,是为了用户自定义提交行为
  25. 4.禁用默认行为: ev.preventDefault()
  26. */
  27. document.forms.login.onsubmit = function (ev) {
  28. //禁用默认行为
  29. ev.preventDefault()
  30. //禁用冒泡
  31. ev.stopPropagation()
  32. //当表单事件的默认行为被禁用后, this===ev.target===ev.currentTarget
  33. console.log(this)
  34. console.log(ev.target)
  35. console.log(ev.currentTarget)
  36. //表单中的任何一个控件,都有一个form属性,永远和当前表单元素绑定
  37. console.log(ev.currentTarget.email)
  38. //禁用默认提交行为后,我们可以对表单控件的内容进行验证操作
  39. //获取到email
  40. const email = this.email.value
  41. //获取 password
  42. const password = this.password.value
  43. // 对 email和password非空验证
  44. if (email.length === 0) {
  45. alert("邮箱不能为空!")
  46. return false
  47. } else if (password.length === 0) {
  48. alert("密码不能为空!")
  49. return false
  50. }
  51. }
  52. </script>
  53. </body>

8/12复习了表单事件

  1. 在表单中的任何元素中,都有一个form属性,通过这个属性可以获取表单中的任何元素
  2. `event.preventDefault()`禁用默认行为是为了自定义行为。
  3. `event`已经被废弃,通常都是通过传参的方式来做
  4. document.form.login.onsubmit=function(){
  5. event.preventDefault();
  6. }
  7. ============

document.form.login.onsubmit=function(ev){

ev.preventDefault();

}

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议