2012-01-08 2 views
0

Вот проблема.Подтвердить RegExp во внешнем файле .js

У меня есть сайт, который использует AJAX, в котором основная домашняя страница загружает файл home.js с основными сценариями, которые требуются для всех страниц сайта. Один из этих основных сценариев заключаются в следующем RegExp:

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 загружается первым, который содержит следующий для проверки даты (Допустимо это значение даты элемента и корректно отображает предполагаемое значение даты):

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

Я прошел как сценарий и HTML с помощью валидатора и все, кажется, в порядке.

Все работает отлично в FF. Однако в IE. Я получаю сообщение о том, что datePattern не определен. Что происходит с объявлением datePattern в файле home.js, которое мне нужно изменить, чтобы оно было доступно глобально для других js-файлов?

Спасибо!

+0

Вы не используете библиотеку Javascript, которая уже имеет проверку даты? – fge

+0

Файл, вероятно, не загружается, когда вы пытаетесь получить доступ к этой функции. IE действительно любит setTimeout или defer – mplungjan

+0

Нет, я не пользуюсь JS Library, хотя это стоит посмотреть. Что касается загружаемого файла, да, он действительно загружен. Скрипт из файла home.js работает безупречно, и скрипт, содержащий функцию $ datePattern.test, отлично работает ... он просто регистрирует datePattern как Undefined. (Есть другие шаги проверки, которые происходят до и после этого, работают нормально, если я перехожу на datePattern.) – Max

ответ

0

Исходное выражение и синтаксис регулярных выражений отлично работали. Проблема заключалась в следующем синтаксисе jquery, который был неудачным, и не сообщал об ошибке, что привело к сбою последующих выражений.

0

Скрипты на странице выполняются один за другим. Логично, что все, что должно произойти, - это линия, определяющая иглу, выполняется до того, что ей нужно. На статической странице это так же просто, как положить его перед другим JS в разметке. В AJAX его нужно загружать и каким-то образом выполнять перед другим, что может оказаться более сложным.

Другой общей проблемой является область применения. Поскольку вы используете var, переменная будет локальной в своей области. Убедитесь, что линия не находится в вызове функции. Хорошим способом сузить проблему является удаление ключевого слова var. Если проблема исправлена; винить область. Если это сохранится; винить исполнение.

Надеюсь, что это поможет при отладке.

+0

Я попытался удалить компонент var без везения. Он объявляется при открытии файла home.js, после чего загружается второй js-файл и выглядит правильно загруженным, когда я просматриваю его в инструментах разработчика скриптов IE. Поэтому я не думаю, что это проблема с загрузкой скрипта. У меня такое ощущение, что это проблема с областью, но я не могу понять, почему глобальная переменная в первом js-файле не будет доступна для загружаемых js-файлов впоследствии. Опять же, это отлично работает в FF, но не в IE. Любые другие идеи, связанные с областью действия? – Max

+0

Выяснил это. У меня, видимо, некорректная ошибка где-то в моем файле home.js, который IE не нравится, поэтому он не может загрузить var datePattern правильно позже ... хотя все остальные элементы сценария работают нормально. Спасибо за вашу помощь! – Max

+1

@Max, вы можете опубликовать это как ответ и принять его. Ошибка может быть полезной для тех, кто смотрит на это позже. – FakeRainBrigand