form监听submit的作用

来源:4-15 编程练习

幕布斯3322991

2020-10-28 23:57:24

# 具体遇到的问题
不知道如下代码具体的用意

        form.addEventListener("submit", function(event) {

            if (!this.checkValidity() ) {

                event.preventDefault();

            }

        });

 去掉以后,感觉完全也不影响表现。


这边this的指代不太清除,是指form吗?如果是的话,好像和如下    ​

    ​    ​form.addEventListener("invalid", function(event) {

            event.preventDefault();

        }, true);

意义重复,不过上面监听invalid去掉的话,倒确实是不能去掉默认气泡

所以我想this是不是指的event(即默认气泡),那验证默认气泡合法性算什么意义?

这里有点糊涂,希望老师帮助捋一下思路



# 报错信息的截图

# 相关课程内容截图

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

<!DOCTYPE html>

<html>


<head>

    <meta charset="UTF-8">

    <title></title>

    <style>

        .oneline {

            line-height: 1.5;

            margin: 10px auto;

        }

        

        .oneline label {

            width: 100px;

            text-indent: 15px;

            font-size: 14px;

            font-family: "Microsoft Yahei";

            display: inline-block;

        }

        

        .oneline .sinput {

            width: 60%;

            height: 30px;

            border-radius: 6px;

            border: 1px solid #e2e2e2;

        }

        

        .oneline input[type="submit"] {

            margin-left: 20px;

            width: 80px;

            height: 30px;

            border: 0;

            background-color: #5899d0;

            color: #fff;

            font-size: 14px;

            border-radius: 6px;

        }

        

        .error-messages {

            color: red;

        }

    </style>

</head>

<body>

    <form id="forms">

        <div class="oneline">

            <label for="name">用户名:</label>

            <input id="name" class="sinput" name="name" type="text" required>

        </div>

        <div class="oneline">

            <label for="email">Email:</label>

            <input id="email" class="sinput" name="email" type="email" required>

        </div>

        <div class="oneline">

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

        </div>

    </form>

    <script>

    function replaceValidationUI(form) {

        form.addEventListener("invalid", function(event) {

            event.preventDefault();

        }, true);

        form.addEventListener("submit", function(event) {

            if (!this.checkValidity() ) {

                event.preventDefault();

            }

        });

        //此处写代码


        var sbbtn = document.getElementById('submits');

        sbbtn.addEventListener('click',function(event){

            var invalidFields = form.querySelectorAll(':invalid'),

                errorMessage = form.querySelectorAll('.error-messages'),

                parent,label;


            for(var i=0;i<errorMessage.length;i++){

                errorMessage[i].parentNode.removeChild(errorMessage[i]);

            }

            for(var i=0;i<invalidFields.length;i++){

                parent = invalidFields[i].parentNode.parentNode;

                label = invalidFields[i].parentNode.children[0];

                parent.insertAdjacentHTML("afterbegin","<div class='error-messages'>"+ label.innerHTML + invalidFields[i].validationMessage +"</div>");

            }

            if (invalidFields.length > 0) {

                invalidFields[0].focus();

            }

        },true)

    }

    var forms = document.getElementById("forms");

    replaceValidationUI(forms);

    </script>

</body>


</html>


写回答

1回答

好帮手慕久久

2020-10-29

同学你好,问题解答如下:

  1.  form.addEventListener("submit", function(event) {});这句代码,是监听表单的提交事件。将该句代码去掉,的确不会影响页面效果。原因是表单添加了验证信息,当不输入正确的验证信息时,submit事件是不会触发的,所以该句代码没有实际意义,可以去掉。

  2. 该句代码中的this,指代表单form,它不是事件对象event,如下:

    http://img.mukewang.com/climg/5f9a21e00900cc3408070432.jpg

因此,form.addEventListener("invalid", function(event) {event.preventDefault(); }, true);这句代码不能去掉,它会阻止默认气泡的产生。

祝学习愉快!

1

0 学习 · 6815 问题

查看课程