html5自带表单验证体验优化及提示气泡修改功能


Posted in HTML / CSS onSeptember 12, 2017

html5自带表单验证

很多朋友进行表单验证的时候,都是自己用jquery或者js手工验证,或者用一下jquery插件进行验证。因为大家觉得html5自带验证不是很好!其实,现在html5自带表单验证,目前已经蛮强大了。我们来看下我用纯html5写的一个表单验证吧!体验一下!

大家觉得这个效果怎么样呢?

这个效果的精华是加了三个图片!

.myform select:required,
.myform input:required,
.myform textarea:required {
    background: #fff url(http://sandbox.runjs.cn/uploads/rs/216/0y89gzo2/star.jpg) no-repeat 99% center;
}
.myform select:required:valid,
.myform input:required:valid,
.myform textarea:required:valid {
    background: #fff url(http://sandbox.runjs.cn/uploads/rs/216/0y89gzo2/right.png) no-repeat 99% center;
    box-shadow: 0 0 5px #5cd053;
    border-color: #28921f;
}
.myform select:focus:invalid,
.myform input:focus:invalid,
.myform textarea:focus:invalid {
    background: #fff url(http://sandbox.runjs.cn/uploads/rs/216/0y89gzo2/error.png) no-repeat 99% center;
    box-shadow: 0 0 5px #d45252;
    border-color: #b03535
}

然后做了一个监听事件:

oninvalid="this.setCustomValidity('请输入正确的号码');" oninput="setCustomValidity('')"

验证密码是否一致的时候,用了一个js

function checkPassword() {
    var pass1 = document.getElementById("Password");
    var pass2 = document.getElementById("Repassword");

    if (pass1.value != pass2.value)
        pass2.setCustomValidity("两次输入的密码不匹配");
    else
        pass2.setCustomValidity("");
}

这样就完成了效果!

假如你觉得,这个自带的气泡也很难看!如下图: html5自带表单验证体验优化及提示气泡修改功能我想换掉!

在谷歌29之前的版本,我们是可以用伪元素来修改气泡!

::-webkit-validation-bubble { min-width:152px; margin-top: -1px;}
::-webkit-validation-bubble-arrow { border: 1px solid #F7CE39; background: #FFFBC7; /* position:relative; */ top: 4px; left: 0px; }
::-webkit-validation-bubble-arrow-clipper { text-align: center; }
::-webkit-validation-bubble-heading { color: #444; }
::-webkit-validation-bubble-message { border: 1px solid #F7CE39; background: #FFFBC7; border-radius: 3px; }
::-webkit-validation-bubble-text-block { font-size: 12px; }

但是呢,这个方法后面被废弃掉了!你会发现修改气泡没有反应!那么怎么修改气泡样式呢?这里就稍微麻烦一些了!思路大概是我们先阻止默认气泡,然后创建新的气泡!

阻止默认气泡

<form>
    <input required>
    <button>Submit</button>
</form>
<script>
    document.querySelector( "input" ).addEventListener( "invalid",
        function( event ) {
            event.preventDefault();
        });
</script>

创建新的UI

代码大致如下:

function replaceValidationUI( form ) {
    //阻止气泡
    form.addEventListener( "invalid", function( event ) {
        event.preventDefault();
    }, true );
    // 支持Safari, iOS Safari, Android 浏览器
    // 默认提交表格
    form.addEventListener( "submit", function( event ) {
        if ( !this.checkValidity() ) {
            event.preventDefault();
        }
    });
    // 新增错误提示的容器
    form.insertAdjacentHTML( "afterbegin", "<ul class='error-messages'></ul>" );
    var submitButton = form.querySelector( "button:not([type=button]), input[type=submit]" );
    submitButton.addEventListener( "click", function( event ) {
        var invalidFields = form.querySelectorAll( ":invalid" ),
            listHtml = "",
            errorMessages = form.querySelector( ".error-messages" ),
            label;
        for ( var i = 0; i < invalidFields.length; i++ ) {
            label = form.querySelector( "label[for=" + invalidFields[ i ].id + "]" );
            listHtml += "<li>" + 
                label.innerHTML +
                " " +
                invalidFields[ i ].validationMessage +
                "</li>";
        }
        // 把错误的信息放到错误容器里面
        errorMessages.innerHTML = listHtml;
        // 给第一个错误的input选中
        // 错误信息容器显示
        if ( invalidFields.length > 0 ) {
            invalidFields[ 0 ].focus();
            errorMessages.style.display = "block";
        }
    });
}
// 替换form中所有的验证UI
var forms = document.querySelectorAll( "form" );
for ( var i = 0; i < forms.length; i++ ) {
    replaceValidationUI( forms[ i ] );
}

总结

以上所述是小编给大家介绍的html5自带表单验证体验优化及提示气泡修改功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

HTML / CSS 相关文章推荐
一款纯css3实现的动画加载导航
Oct 08 HTML / CSS
简单介绍CSS3中Media Query的使用
Jul 07 HTML / CSS
canvas三角函数模拟水波效果的示例代码
Jul 03 HTML / CSS
html5教程调用绘图api画简单的圆形代码分享
Dec 04 HTML / CSS
HTMl5的存储方式sessionStorage和localStorage详解
Mar 18 HTML / CSS
利用HTML5的新特点实现图片文件异步上传
May 29 HTML / CSS
HTML5进度条特效
Dec 18 HTML / CSS
HTML5 拖放(Drag 和 Drop)详解与实例代码
Sep 14 HTML / CSS
htnl5利用svg页面高斯模糊的方法
Jul 20 HTML / CSS
钉钉企业内部H5微应用开发详解
May 12 HTML / CSS
HTML5实现直播间评论滚动效果的代码
May 27 HTML / CSS
CSS3实现的文字弹出特效
Apr 16 HTML / CSS
html5利用canvas绘画二级树形结构图的示例
Sep 27 #HTML / CSS
html5新增的定时器requestAnimationFrame实现进度条功能
Dec 13 #HTML / CSS
详解使用HTML5的classList属性操作CSS类
Oct 13 #HTML / CSS
HTML5网页音乐播放器的示例代码
Nov 09 #HTML / CSS
js实现移动端H5页面手指滑动刻度尺功能
Nov 16 #HTML / CSS
HTML5实现视频直播功能思路详解
Nov 16 #HTML / CSS
基于HTML5 Canvas 实现商场监控实例详解
Nov 20 #HTML / CSS
You might like
PHP fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
php访问数组最后一个元素的函数end()用法
2015/03/18 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
MAC下通过改apache配置文件切换php多版本的方法
2017/04/26 PHP
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
2013/01/09 Javascript
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
jquery中JSON的解析方式
2015/03/16 Javascript
原生js结合html5制作简易的双色子游戏
2015/03/30 Javascript
JS出现失效的情况总结
2017/01/20 Javascript
js 动态生成html 触发事件传参字符转义的实例
2017/02/14 Javascript
最通俗易懂的javascript变量提升详解
2017/08/05 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
Vue之Mixins(混入)的使用方法
2019/09/24 Javascript
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
Python实现partial改变方法默认参数
2014/08/18 Python
跟老齐学Python之关于类的初步认识
2014/10/11 Python
python optparse模块使用实例
2015/04/09 Python
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
python+selenium 定位到元素,无法点击的解决方法
2019/01/30 Python
20行python代码实现人脸识别
2019/05/05 Python
解决python 找不到module的问题
2020/02/12 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
2020/06/02 Python
Python实现进度条和时间预估的示例代码
2020/06/02 Python
利用CSS3的transform做的动态时钟效果
2011/09/21 HTML / CSS
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
如何删除一个表里面的重复行
2013/07/13 面试题
软件配置管理有什么好处
2015/04/15 面试题
QA工程师岗位职责
2013/11/20 职场文书
幼儿园托班开学寄语
2014/01/18 职场文书
成品库仓管员岗位职责
2014/04/06 职场文书
中班下学期幼儿评语
2014/12/30 职场文书
XX部保密工作制度范本
2019/08/27 职场文书
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python