jQuery 验证在依赖字段上冻结 IE8
以下代码适用于 FF 和 IE8。现在(常规 Win 更新)一旦 IE 尝试应用 ev_starttime
和 ev_endtime
规则集的任何部分,它就会冻结。 IE CPU 使用率飙升至 50%,但内存使用率不受影响。任一浏览器都没有错误消息(对于 FF 使用 Firebug,对于 IE 使用 IE 开发人员工具)。从CPU使用率的变化来看,我认为IE陷入了循环,但这不是任何其他人都可以看到的循环。有想法吗?
$("form[name='event_form']").validate({
debug: true,
rules: {
title: {required:true, minlength:5},
description: {required:true, minlength:5},
event_type_id: "required",
ev_start: { dateCan: true, required: true},
ev_end:{ dateCan: true,
minDate: "input[name='ev_start']"
},
ev_starttime:{
required:
function(element){
return $("input[name='allday']:unchecked");
},
time: true,
maxTime: {
depends: function(element) {
return $("input[name='ev_endtime']:filled")
&& $("input[name='ev_start']").valid()
&& $("input[name='ev_end']").valid()
&& $("input[name='ev_start']").val()==$("input[name='ev_end']").val();
},
param: "input[name='ev_endtime']"
}
},
ev_endtime:{
required:
function(element){
return $("input[name='allday']:unchecked")
},
time: true,
minTime: {
depends: function(element) {
return $("input[name='ev_start']").valid()
&& $("input[name='ev_end']").valid()
&& $("input[name='ev_starttime']").valid()
&& $("input[name='ev_start']").val()==$("input[name='ev_end']").val();
},
param: "input[name='ev_starttime']"
}
}
}
});
minTime 和 maxTime 规则如下所示:
jQuery.validator.addMethod("minTime", function(value, element, param) {
try {
var aftertime=value.split(':');//hours and minutes
if($(param).val()=='') throw($param.name + ' empty');
var beforetime=$(param).val().split(':');
var at=new Date(0,0,0,aftertime[0],aftertime[1]*1);
var bt=new Date(0,0,0,beforetime[0],beforetime[1]*1);
return this.optional(element) || at > bt;
} catch(err){
return false;
}
}, function(param){
return "Time must occur after " + $(param).val();
}
);
jQuery.validator.addMethod("maxTime", function(value, element, param) {
try {
var beforetime = value.split(':');//hours and minutes
if($(param).val()=='') throw($param.name + ' empty');
var aftertime =$(param).val().split(':');
var at=new Date(0,0,0,aftertime[0],aftertime[1]*1);
var bt=new Date(0,0,0,beforetime[0],beforetime[1]*1);
return this.optional(element) || at > bt;
} catch(err){
return false;
}
}, function(param){
return "Time must occur before " + $(param).val();
}
);
The following code was working on FF and on IE8. Now (regular Win-updates) IE freezes as soon as it tries to apply any part of either or both rulesets for ev_starttime
and ev_endtime
. IE CPU usage shoots to 50%, but memory usage is not affected. There are no error messages from either browser (using Firebug for FF and IE Developer Tools for IE). From the CPU usage change, I'm thinking that IE is getting stuck in a loop, but it's not a loop anyone else can see. Ideas?
$("form[name='event_form']").validate({
debug: true,
rules: {
title: {required:true, minlength:5},
description: {required:true, minlength:5},
event_type_id: "required",
ev_start: { dateCan: true, required: true},
ev_end:{ dateCan: true,
minDate: "input[name='ev_start']"
},
ev_starttime:{
required:
function(element){
return $("input[name='allday']:unchecked");
},
time: true,
maxTime: {
depends: function(element) {
return $("input[name='ev_endtime']:filled")
&& $("input[name='ev_start']").valid()
&& $("input[name='ev_end']").valid()
&& $("input[name='ev_start']").val()==$("input[name='ev_end']").val();
},
param: "input[name='ev_endtime']"
}
},
ev_endtime:{
required:
function(element){
return $("input[name='allday']:unchecked")
},
time: true,
minTime: {
depends: function(element) {
return $("input[name='ev_start']").valid()
&& $("input[name='ev_end']").valid()
&& $("input[name='ev_starttime']").valid()
&& $("input[name='ev_start']").val()==$("input[name='ev_end']").val();
},
param: "input[name='ev_starttime']"
}
}
}
});
minTime and maxTime rules look like this:
jQuery.validator.addMethod("minTime", function(value, element, param) {
try {
var aftertime=value.split(':');//hours and minutes
if($(param).val()=='') throw($param.name + ' empty');
var beforetime=$(param).val().split(':');
var at=new Date(0,0,0,aftertime[0],aftertime[1]*1);
var bt=new Date(0,0,0,beforetime[0],beforetime[1]*1);
return this.optional(element) || at > bt;
} catch(err){
return false;
}
}, function(param){
return "Time must occur after " + $(param).val();
}
);
jQuery.validator.addMethod("maxTime", function(value, element, param) {
try {
var beforetime = value.split(':');//hours and minutes
if($(param).val()=='') throw($param.name + ' empty');
var aftertime =$(param).val().split(':');
var at=new Date(0,0,0,aftertime[0],aftertime[1]*1);
var bt=new Date(0,0,0,beforetime[0],beforetime[1]*1);
return this.optional(element) || at > bt;
} catch(err){
return false;
}
}, function(param){
return "Time must occur before " + $(param).val();
}
);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论