javascript - 点击提交按钮后submit事件没有被触发
巴扎黑
巴扎黑 2017-04-11 10:36:01
[JavaScript讨论组]
var forms = document.querySelectorAll("form")
for (var i = 0; i < forms.length; i++) {
    forms[i].addEventListener("submit", function (e) {
        console.log(this);
        if (!this.checkValidity()) {
            e.preventDefault();
        }
    }, true);
}
    

Contact Info

控制台中观察不到this的输出


更新结果:
submit事件在填写的表单内容符合要求时才会被触发。所以我后面的 if (!this.checkValidity()
如果我将表单全部填对的话是能看到this的输出的。
@yunkehe 绑定在submit上的确能阻止跳转,我这里没有成功阻止跳转是因为我的if语句没有意义造成的

在submit事件触发时验证表单内容来阻止表单提交是为了验证在js中自定义的检测
比如

Change Your Password

通过 setCustomValidity('Passwords must match.'); 如果两个密码不匹配的话,this.checkValidity() 将会返回false。此时表单提交将会被阻止。
每次通过checkValidity方法验证表单元素正确性的时候且验证失败,出错节点的invalid事件会被触发,我们可以在这里添加一些对用户有用的信息。
例子来自 http://www.html5rocks.com/en/tutorials/forms/constraintvalidation/

巴扎黑
巴扎黑

全部回复(2)
高洛峰

this应该是可以打出来的,我猜问题出在this.checkValidity(),代码改成这样试试:

var forms = document.querySelectorAll("form")
for (var i = 0; i < forms.length; i++) {
    forms[i].addEventListener("submit", function (e) {
        console.log(this, this.checkValidity());
        e.preventDefault();
    }, true);
}

看看打出来是什么

大家讲道理

submit事件是触发了的,触发后,没有成功阻止页面的默认跳转,所有没看到打印的this;

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号