jquery validate绑定动态生成的dom失效的问题及解决方案

发布时间:2019-05-28 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了jquery validate绑定动态生成的dom失效的问题及解决方案脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

1. 问题的出现

jquery validate算是一个很常用的表单验证的插件,但是不能对动态生成的元素绑定验证事件
百度搜索也可以搜出一大堆类似的问题,但是没有找到解决方案,自己花了点时间解决了

2.解决思路

图片描述

点击添加

图片描述

这里动态生成的input是做了非空的处理,然而真实情况下,点击保存还是可以直接提交空值

jquery validate绑定动态生成的dom失效的问题及解决方案

jquery validate绑定动态生成的dom失效的问题及解决方案

在chrome浏览器中查看事件,发现并没有keyup事件,那我就在想,有没有可能是绑定事件的时候还没有这个元素呢?于是决定用PRomise 改成异步

 VAR promise = new Promise(function(resolve, reject) {
                $("#tab-1 .panel-body").prePEnd(acc); //动态添加元素
                resolve();
            }).then(function(resolve) {
                myAccValidate(GLOBAL.num); //添加绑定事件
            })

可以看到,事件已经绑定了,但是点击提交,还是没有验证,

jquery validate绑定动态生成的dom失效的问题及解决方案

在浏览器中打个断点看下绑定事件的时候发生了什么

jquery validate绑定动态生成的dom失效的问题及解决方案

可以看到accSn并没有指向input,而只是个字符串,那看来是作用域的问题 ,我们把这段绑定的代码放到全局中运行

  var acCForm = "#accForm"+num;
        jQuery.globalEval(`
                $("${accForm}").validate({
        rules:{
            ${accSn}:{ 
                required:true,
                maxlength:20 
            },
            ${accName}:{
                required:true,
                maxlength:20 
            }
        },
        message:{
            ${accSn}:{ 
                required:"不能为空",
                maxlength:"长度不能超过20" 
            },
            ${accName}:{
                required:"不能为空",
                maxlength:"长度不能超过20" 
            }
    }
    });
        `)

jquery validate绑定动态生成的dom失效的问题及解决方案

可以看到指向了input ,并且表单验证也生效

jquery validate绑定动态生成的dom失效的问题及解决方案

3. 总结

1.把生成元素和绑定事件改成异步
2.绑定事件的作用域改成全局

脚本宝典总结

以上是脚本宝典为你收集整理的jquery validate绑定动态生成的dom失效的问题及解决方案全部内容,希望文章能够帮你解决jquery validate绑定动态生成的dom失效的问题及解决方案所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。