2014-02-13 2 views
1

Я использую iframe на моей странице, который состоит из формы с элементами ввода. Каждый элемент ввода имеет событие onblur(), которое проверяет ввод.IE 8 iFrame вызывает ошибки JavaScript только при первой загрузке

Когда я открываю страницу в IE 8 с только что очищенным кешем, она вызывает ошибку javascript.

document.getElementById(...)' is Null or not an Object 

Однако, когда я проверяю форму, она полностью загружается, и я пытаюсь получить доступ. Кроме того, когда я перезагружаю всю страницу, я больше не получаю никаких ошибок. Также, когда я загружаю содержимое iframe самостоятельно, я также не получаю ошибок.

Firefox и Chrome не допускают ошибок вообще.

Короче говоря, ошибки Javascript я получаю только в IE и только тогда, когда я использую iframe для отображения формы (которая является обязательной) и только тогда, когда страница загружается в первый раз.

Любые идеи о том, как я могу это исправить?

Надеюсь, что это не слишком запутанно читать.

Редактировать:

document.getElementById("vHint_"+fieldName).innerHTML=data; 

Имя_поля является идентификатор поля ввода. Данные - это возвращаемое значение проверки. В этом случае данные являются тегами изображений. После каждого поля ввода используется тег span с идентификатором "vHint _" + fieldName.

Событие прилагается так:

<input id="Jahr" class="input" type="text" onblur="validDate(this,'Jahr','_beginn')" maxlength="4" style="width:32px" value="" name="Jahr"> 
+0

Итак, 'onload' вы выполняете цикл' getElementById() 'и присоединяете' onblur', и вот где происходит ошибка? – user13500

+0

Onblur запускается после ввода пользователем данных в элемент ввода. Затем вход проверяется, а затем getElementById() используется для отображения, когда входы были правильными. – Drai

+0

можете ли вы добавить свой код для использования getElementId(), где происходит ошибка –

ответ

1

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

И я нашел решение.

Все поля ввода создаются с помощью собственной ASP Framework, которая помещает их всех в сеанс. Событие onblur() входного поля в iframe запускает запрос AJAX в файл ASP, передавая имя поля ввода в качестве параметра запроса. ASP-файл теперь пытается найти поле в сеансе и получить его значение для проверки ввода. После этого результат отправляется обратно в файл javascript, который затем использует document.getElementById("vHint_"+fieldName).innerHTML=data;, чтобы опубликовать результат на странице.

Это нормально работает без эррос. Но, поскольку приложение запускается в iframe, а домены соседней страницы и приложения в iframe различаются, IE отвергает сеанс iframe. Таким образом, результат проверки ASP пуст, поскольку он не смог найти поле в сеансе.

Поняв, что из единственное, что должно быть сделано, чтобы добавить эту строку кода в приложении:

Response.AddHeader "P3P", "CP=""CAO PSA OUR""" 

Таким образом, IE не отвергает сеанс приложения больше. Возможно, это может быть полезно и для других.

Смежные вопросы