2012-01-08 83 views
0

这是一个令人困惑的问题。验证外部.js文件中的RegExp

我有一个网站使用AJAX,其中主要主页加载一个home.js文件与网站上所有网页所需的核心脚本。一个这些核心脚本是下述正则表达式:

var datePattern = new RegExp("^([0][1-9]|[1][0-2])\/([0][1-9]|[1-2][0-9]|[3][0-1])\/([12][0-9][0-9][0-9])$"); 

当用户进入一个页面(通过AJAX),适当的形式验证的script.js文件被加载第一其中包含以下验证日期(其中val是日期元素的值并正确显示预期日期值):

var val=elem[i].value; 
if (!datePattern.test(val)) { 
    elem[i].style.background="#FF0000"; 
    errno++; 
} 

我已经过了两个剧本,并通过验证的HTML和一切似乎是好的。

一切工作正常FF。但在IE中。我收到datePattern未定义的消息。关于home.js文件中的datePattern声明,我需要进行更改以确保它对全局可用于其他js文件是什么?

谢谢!

+0

难道你不使用已经有日期验证的Javascript库吗? – fge 2012-01-08 16:46:33

+0

当您尝试访问该功能时,该文件可能未加载。 IE不喜欢setTimeout或推迟 – mplungjan 2012-01-08 17:42:57

+0

不,我没有使用JS库,尽管它值得研究。至于正在加载的文件,是的,它实际上是加载的。 home.js文件中的脚本完美地工作,包含$ datePattern.test函数的脚本工作正常......它只是将datePattern注册为Undefined。 (还有其他验证步骤发生在该工作之前和之后,如果我跨过datePattern,则会发生这种情况。) – Max 2012-01-08 18:10:54

回答

0

原始的正则表达式和语法工作正常。问题在于另一个失败的jquery语法,不报告错误,导致后续表达式失败。

0

页面上的脚本一个接一个地执行。从逻辑上讲,所有需要发生的事情都是针定义线在需要之前执行。在静态页面上,它就像在标记中的其他JS之前一样简单。在AJAX中,它需要加载并以某种方式在另一个之前执行,这可能会更困难。

另一个常见问题是范围。由于您使用的是var,因此该变量将在本地范围内。确保该行不在函数调用中。缩小问题的一个好方法是删除var关键字。如果问题得到解决;责怪范围。如果它仍然存在;责备执行命令。

我希望可以帮助调试。

+0

我尝试删除var组件,但没有运气。它在home.js文件的开始处声明,第二个js文件在那之后被加载,并且当我在IE的脚本开发工具中查看它时似乎被正确加载。所以我不认为这是脚本加载的问题。我有一种感觉,这是一个范围问题,但我不明白为什么第一个js文件中的全局变量不能用于随后加载的js文件。再次,这在FF中正常工作,但不是IE。任何其他范围相关的想法尝试? – Max 2012-01-08 18:32:35

+0

想通了。我显然在我的home.js文件中有一个未报告的错误,IE不喜欢,所以它无法在以后正确加载var datePattern ...虽然所有其他脚本元素运行良好。感谢您的帮助! – Max 2012-01-08 18:44:41

+1

@Max,您可以将其作为答案发布,并接受它。这个错误可能会对稍后看到这些的人有所帮助。 – FakeRainBrigand 2012-01-08 18:46:35