首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >头js + jquery.validate.unobtrusive +自定义验证器

头js + jquery.validate.unobtrusive +自定义验证器
EN

Stack Overflow用户
提问于 2011-10-10 17:03:45
回答 3查看 633关注 0票数 1

我使用head.js (http://headjs.com)来异步加载我的javascripts。

我对jquery.validate.unobtrusive和自定义验证器有问题。

所有自定义验证都应该在jquery.validatejquery.validate.unobtrusive之后加载,我这样做如下:

代码语言:javascript
复制
<head>
    <script src="@Url.Script("jquery")"></script>
    <script src="@Url.Script("head.load")"></script>
</head>
<body>
<!-- entire markup -->
    <script>
    head.js("@Url.Script("jquery.validate")", function () {
            head.js("@Url.Script("jquery.validate.unobtrusive")", function () {
                    head.js("@Url.Script("custom-validations")");
                });                
        });
    </script>
</body>

问题是custom-validations脚本应该在jquery.validate.unobtrusive之后加载,但在document.onready事件之前加载,因为jquery.validate.unobtrusive使用document.onready来执行它的黑魔法。但是,当我使用在脚本开始加载之前触发的head.js document.onready事件时,我的自定义验证不起作用。

在加载异步脚本时,是否有解决此类问题的通用解决方案/解决方案?

我的客户不希望看到jquery.validate/jquery.validate.onubtrusive<head>标记中的另一个问题。

用于定位js文件的@Url.Script -帮助方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-17 13:45:15

我自己找到了解决办法。需要使用jQuery.holdReady()来保存“document.ready”,而所有依赖于jquery.validate.unobtrusive的脚本都不会加载。

代码语言:javascript
复制
<head>
    <script src="@Url.Script("jquery")"></script>
    <script src="@Url.Script("head.load")"></script>
</head>
<body>
<!-- entire markup -->
    <script>
        head.js("@Url.Script("jquery.validate")", function () {
            $.holdReady(true); // set semaphore for dom ready. 
            head.js("@Url.Script("jquery.validate.unobtrusive")", function () {
                    head.js("@Url.Script("custom-validations")", function () { //fires when all provided scripts are loaded
                        $.holdReady(false); // release semaphore and fire event
                    });
            });                
        });
    </script>
</body>
票数 2
EN

Stack Overflow用户

发布于 2011-10-14 22:39:33

加载后尝试$.validator.unobtrusive.parse('#the_form_in_question')。

票数 0
EN

Stack Overflow用户

发布于 2011-10-17 13:50:04

这应该是可行的:

代码语言:javascript
复制
head.ready("@Url.Script("jquery.validate")", function () {
    head.ready("@Url.Script("jquery.validate.unobtrusive")", function () {
        head.ready("@Url.Script("custom-validations")",function(){
            // your code here
        });
    });                
});

如果使用jquery,可以通过getScript方法添加脚本,该方法在加载脚本时触发回调,这样可以有所帮助:

代码语言:javascript
复制
$(document).ready(function(){
    $.getScript("@Url.Script("jquery.validate")",function(){
          $.getScript("@Url.Script("jquery.validate.unobtrusive")",function(){
              $.getScript("@Url.Script("custom-validations")",function(){
                  // do your stuff here
              });
          });
    });
});
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7716201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档