我使用head.js (http://headjs.com)来异步加载我的javascripts。
我对jquery.validate.unobtrusive和自定义验证器有问题。
所有自定义验证都应该在jquery.validate和jquery.validate.unobtrusive之后加载,我这样做如下:
<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 -帮助方法。
发布于 2011-10-17 13:45:15
我自己找到了解决办法。需要使用jQuery.holdReady()来保存“document.ready”,而所有依赖于jquery.validate.unobtrusive的脚本都不会加载。
<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>发布于 2011-10-14 22:39:33
加载后尝试$.validator.unobtrusive.parse('#the_form_in_question')。
发布于 2011-10-17 13:50:04
这应该是可行的:
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方法添加脚本,该方法在加载脚本时触发回调,这样可以有所帮助:
$(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
});
});
});
});https://stackoverflow.com/questions/7716201
复制相似问题