jQuery脚本在IE中占用太多时间

时间:2010-03-11 23:33:24

标签: jquery validation

我有一个说120个日期框的页面。我正在使用validate插件来验证页面提交时的那些框。我写了一些自定义日期验证码。

我使用jQuery.validator.addMethod()创建规则,然后使用validator.addClassRules()将这些验证添加到我的日历中。

它在firefox中运行正常(有时)但是在我点击进入IE时它会弹出一个弹出窗口说“此页面上的脚本导致Internet Explorer慢下来......”

有人可以帮忙。

添加代码.....

/******* This is the input thats there *********/
<input type="text" toDate="${dateRangeModel.toDate}" fromDate="${dateRangeModel.fromDate}" prefill="mm/dd/yyyy" class="calendarInput"  />

/* Checking if its a valid date */
            jQuery.validator.addMethod("isDateValid",function(value, element) { 
                    var re =  /(0[1-9]|1[012]|[1-9])+\/(0[1-9]|[12][0-9]|3[01]|[1-9])+\/(19|20)\d\d/;                                      

                    if($(element).is(':hidden') || value.match(re) || value === $(element).attr('prefill')){
                        return true;
                    }
                    else    {
                        return false;
                    }
            }, 'Enter a valid date');


/******** Adding class rule ***********/
$.validator.addClassRules({
                calendarInput: {
                    dateRange:true,
                    isDateValid: true
                }
            });

2 个答案:

答案 0 :(得分:0)

IE特定性能问题的最佳工具是dynaTrace AJAX Edition。他们有quick start tutorials on the site,只需点亮你的页面,看看花了最多的时间来执行。

是的,它是免费的:)

答案 1 :(得分:0)

您可以做的一件事是在验证调用之外编译正则表达式,比如

var re = new RegExp("(0[1-9]|1[012]|[1-9])+\/(0[1-9]|[12][0-9]|3[01]|[1-9])+\/(19|20)\d\d");

然后在所有验证调用中重用相同的对象,而不是不断地重建它。也就是说,在同一页面上有120个几乎任何东西都是UI灾难。

你可以缩短剩下的部分(主要是为了使它更简洁):

jQuery.validator.addMethod("isDateValid",function(value, element) { 
    return ($(element).is(':hidden') || value === $(element).attr('prefill') || value.match(re));
}, 'Enter a valid date');

我重新安排了测试,希望将正则表达式测试放在最后会使事情变得更快。