js中的e.preventDefault()怎么使用

前端开发   发布日期:2025年03月24日   浏览次数:117

本文小编为大家详细介绍“js中的e.preventDefault()怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“js中的e.preventDefault()怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

问题:

为什么我在父组件上使用preventDefault(),阻止默认事件会导致我的子组件的默认事件失效?

分析:

首先,我们看官网对event.preventDefault()这一方法的解释,在繁体中文版的MDN网站中,只是简单的提到了取消事件的预设行为,而不影响事件的传递。如字面意思,很好理解。

而在简体中文版的MDN网站中,对于此事件描述的文字对比繁体版较多

在这里提到一个词,叫显示处理,不是很能理解这个词。繁体版与简体版的比较对应下来,也能够说的过去,所以这里并不能解决我们的疑问,到底为什么在父元素上调用了这个方法阻止默认事件,子元素的默认事件也消失了?

持续跟进:

翻遍了百度,我没有找到有关于这个问题的解答,莫得办法了,只有自己去试着找一些结论性的东西。

尝试:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. #box{
  10. height: 300px;
  11. overflow: auto;
  12. width:200px;
  13. padding: 40px;
  14. margin: 0 auto;
  15. background: grey;
  16. }
  17. #gdfather{
  18. position: relative;
  19. height: 600px;
  20. overflow: auto;
  21. width:400px;
  22. margin: 40px;
  23. background: rgba(0, 255, 255, 0.219);
  24. }
  25. #father{
  26. position: absolute;
  27. top: 20px;
  28. height: 200px;
  29. overflow: auto;
  30. width: 600px;
  31. margin: 40px;
  32. background-color: rgba(128, 128, 128, 0.349);
  33. }
  34. #son{
  35. position: absolute;
  36. top: 20px;
  37. height: 1400px;
  38. width: 800px;
  39. margin: 40px;
  40. background-color: rgba(205, 92, 92, 0.26);
  41. }
  42. #box2{
  43. display: flex;
  44. justify-content: center;
  45. align-items: center;
  46. flex-direction: column;
  47. height:200px;
  48. width: 200px;
  49. background-color: khaki;
  50. }
  51. </style>
  52. </head>
  53. <body>
  54. <div id='box'>
  55. <div id='gdfather'>
  56. <p>祖先中的内容</p>
  57. <p>祖先中的内容</p>
  58. <p>祖先中的内容</p>
  59. <p>祖先中的内容</p>
  60. <p>祖先中的内容</p>
  61. <p>祖先中的内容</p>
  62. <p>祖先中的内容</p>
  63. <p>祖先中的内容</p>
  64. <p>祖先中的内容</p>
  65. <div id='father'>
  66. <p>父亲中的内容</p>
  67. <p>父亲中的内容</p>
  68. <p>父亲中的内容</p>
  69. <p>父亲中的内容</p>
  70. <p>父亲中的内容</p>
  71. <p>父亲中的内容</p>
  72. <p>父亲中的内容</p>
  73. <p>父亲中的内容</p>
  74. <p>父亲中的内容</p>
  75. <div id='son'>
  76. <p>儿子中的内容</p>
  77. <p>儿子中的内容</p>
  78. <p>儿子中的内容</p>
  79. <p>儿子中的内容</p>
  80. <p>儿子中的内容</p>
  81. <p>儿子中的内容</p>
  82. <p>儿子中的内容</p>
  83. <p>儿子中的内容</p>
  84. <p>儿子中的内容</p>
  85. </div>
  86. </div>
  87. </div>
  88. </div>
  89. <div id='box2'>
  90. <input id="ipt" type="text">
  91. <div id='inbox'>
  92. <input id='inIpt' type="text">
  93. </div>
  94. </div>
  95. <script>
  96. let gdfather=document.getElementById('gdfather')
  97. let father=document.getElementById('father')
  98. let son=document.getElementById('son')
  99. gdfather.addEventListener('touchmove',(e)=>{
  100. // console.log('gdfather')
  101. // e.preventDefault()
  102. })
  103. father.addEventListener('touchmove',(e)=>{
  104. // console.log('father')
  105. console.log(e.preventDefault.toString())
  106. console.log(e)
  107. })
  108. let box2=document.getElementById('box2')
  109. let inbox=document.getElementById('inbox')
  110. let ipt=document.getElementById('ipt')
  111. let inIpt=document.getElementById('inIpt')
  112. let events
  113. box2.addEventListener('keydown',(e)=>{
  114. // e.preventDefault()
  115. console.log(e===events)
  116. })
  117. ipt.addEventListener('keydown', (e)=>{
  118. console.log(e===events)
  119. console.log(JSON.stringify(e)===JSON.stringify(events))
  120. events=e
  121. })
  122. inIpt.addEventListener('keydown', (e)=>{
  123. // e.preventDefault()
  124. events.preventDefault()
  125. console.log(events)
  126. })
  127. </script>
  128. </body>
  129. </html>

e.preventDefault()与return false的区别

事件处理函数的返回值(return false)只对通过属性注册的处理函数才有意义;
也就是说如果我们不是通过addEventListener()函数来绑定事件的话,那么要禁止默认事件的话,用的就是return false;

如果使用addEventListener()或者attachEvent()函数来绑定的话,就要使用e.preventDefault()方法或者设置事件对象的returnValue属性来阻止默认事件。

以上就是js中的e.preventDefault()怎么使用的详细内容,更多关于js中的e.preventDefault()怎么使用的资料请关注九品源码其它相关文章!