温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2023-04-20 17:27:41 来源:亿速云 阅读:143 作者:iii 栏目:开发技术

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

问题:

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

分析:

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

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

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

持续跟进:

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

尝试:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #box{
            height: 300px;
            overflow: auto;
            width:200px;
            padding: 40px;
            margin: 0 auto;
            background: grey;
        }
        #gdfather{
            position: relative;
            height: 600px;
            overflow: auto;
            width:400px;
            margin: 40px;
            background: rgba(0, 255, 255, 0.219);
        }
        #father{
            position: absolute;
            top: 20px;
            height: 200px;
            overflow: auto;
            width: 600px;
            margin: 40px;
            background-color: rgba(128, 128, 128, 0.349);
        }
        #son{
            position: absolute;
            top: 20px;
            height: 1400px;
            width: 800px;
            margin: 40px;
            background-color: rgba(205, 92, 92, 0.26);
        }
        #box2{
            display: flex;
            justify-content: center;
            align-items: center;
            flex-direction: column;
            height:200px;
            width: 200px;
            background-color: khaki;
        }
    </style>
</head>
<body>
    <div id='box'>
        <div id='gdfather'>
            <p>祖先中的内容</p>
            <p>祖先中的内容</p>
            <p>祖先中的内容</p>
            <p>祖先中的内容</p>
            <p>祖先中的内容</p>
            <p>祖先中的内容</p>
            <p>祖先中的内容</p>
            <p>祖先中的内容</p>
            <p>祖先中的内容</p>
            <div id='father'>
                <p>父亲中的内容</p>
                <p>父亲中的内容</p>
                <p>父亲中的内容</p>
                <p>父亲中的内容</p>
                <p>父亲中的内容</p>
                <p>父亲中的内容</p>
                <p>父亲中的内容</p>
                <p>父亲中的内容</p>
                <p>父亲中的内容</p>
                <div id='son'>
                    <p>儿子中的内容</p>
                    <p>儿子中的内容</p>
                    <p>儿子中的内容</p>
                    <p>儿子中的内容</p>
                    <p>儿子中的内容</p>
                    <p>儿子中的内容</p>
                    <p>儿子中的内容</p>
                    <p>儿子中的内容</p>
                    <p>儿子中的内容</p>
                </div>
            </div>
        </div>
    </div>
    <div id='box2'>
        <input id="ipt" type="text">
        <div id='inbox'>
            <input id='inIpt' type="text">
        </div>
    </div>
    <script>
        let gdfather=document.getElementById('gdfather')
        let father=document.getElementById('father')
        let son=document.getElementById('son')
        gdfather.addEventListener('touchmove',(e)=>{
            // console.log('gdfather')
            // e.preventDefault()
        })
        father.addEventListener('touchmove',(e)=>{
            // console.log('father')
            console.log(e.preventDefault.toString())
            console.log(e)
        })
        let box2=document.getElementById('box2')
        let inbox=document.getElementById('inbox')
        let ipt=document.getElementById('ipt')
        let inIpt=document.getElementById('inIpt')
        let events
        box2.addEventListener('keydown',(e)=>{
            // e.preventDefault()
            console.log(e===events)
        })
        ipt.addEventListener('keydown', (e)=>{
            console.log(e===events)
            console.log(JSON.stringify(e)===JSON.stringify(events))
            events=e
        })

        inIpt.addEventListener('keydown', (e)=>{
            // e.preventDefault()
            events.preventDefault()
            console.log(events)
        })
    </script>
</body>
</html>

e.preventDefault()与return false的区别

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

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

读到这里,这篇“js中的e.preventDefault()怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

js
AI