2012-01-08 4 views
0

ここで問題が発生します。外部の.jsファイルでRegExpを検証します

私は、AJAXを使用するサイトを持っています。このサイトでは、プライマリホームページに、サイトのすべてのページで必要なコアスクリプトを含むhome.jsファイルが読み込まれます。ユーザーは(AJAX経由)ページになると

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])$"); 

、適切なフォーム検証script.jsファイルが最初にロードされる(日付を検証するために、次のvalが含まれています。これらのコアのスクリプトの一つは、次の正規表現であります)日付要素の値は、正しく予測される日付の値を表示します。

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

私はバリ、すべてを通してスクリプトとHTMLの両方がOKであるように思わ合格しています。

すべてがFFで正常に動作します。しかし、IEで。 datePatternが定義されていないというメッセージが表示されます。 home.jsファイルのdatePattern宣言は、他のjsファイルに対してグローバルに使用できるように変更する必要がありますか?

ありがとうございます!

+0

既に日付検証を行っているJavascriptライブラリを使用していませんか? – fge

+0

関数にアクセスしようとしているときにファイルが読み込まれない可能性があります。 IEはsetTimeoutまたはdeferを好きです – mplungjan

+0

いいえ、私はJSライブラリを使用していませんが、調べる価値があります。ロードされているファイルについては、実際にロードされています。 home.jsファイルのスクリプトは完璧に動作し、$ datePattern.test関数を含むスクリプトはうまくいきます... datePatternをUndefinedとして登録するだけです。 (私がdatePatternをステップオーバーすると、うまく動作する前と後に他の検証ステップがあります) – Max

答えて

0

元の正規表現と構文が正常に機能しました。この問題は、失敗してエラーを報告しない別のjquery構文で発生し、後続の式が失敗する原因となりました。

0

ページ上のスクリプトが次々に実行されます。論理的には、ニードル定義線が必要なときに実行される必要があります。静的ページでは、マークアップ内の他のJSの前に置くのと同じくらい簡単です。 AJAXでは、ロードする必要があり、別のものより先に実行する必要があります。

その他の一般的な問題はスコープです。 varを使用しているので、変数は独自のスコープに対してローカルになります。関数呼び出し中に行がないことを確認してください。問題を絞り込むには、varというキーワードを削除するのが良い方法です。問題が解決した場合。責任範囲。それが続くならば。実行命令を責める。

デバッグに役立つことを願っています。

+0

私は運がないvarコンポーネントを削除しようとしました。これはhome.jsファイルのオープン時に宣言され、2番目のjsファイルはそれ以降に読み込まれ、IEのスクリプト開発ツールで見ると正しく読み込まれるように見えます。だから私はそれがスクリプトの読み込みで問題だとは思わない。スコープの問題だと感じていますが、最初のjsファイルのグローバル変数がjsファイルをロードするために使用できない理由がわかりません。繰り返しますが、これはFFでは正常に動作しますが、IEでは正常に動作しません。他のスコープ関連のアイデアを試してみませんか? – Max

+0

それを考え出した。私は明らかに私のhome.jsファイルのどこかにIEのような報告されていないエラーがありますので、後でvar datePatternを正しくロードできません。他のスクリプト要素は正常に動作します。あなたの助けをありがとう! – Max

+1

@マックス、それを回答として投稿し、それを受け入れることができます。このエラーは後でこれを見ている人にとって参考になるかもしれません。 – FakeRainBrigand

関連する問題