2012-01-08 84 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