IE выдает ошибку JavaScript: значение свойства 'googleMapsQuery' равно null или undefined, а не объект Function (работает в других браузерах)

У меня настоящая проблема с областью JavaScript в IE 9.

Это находится внутри тела моего документа (да, я понимаю, что script должен идти в голову для правильного HTML, но я никогда раньше не разбивал script). script находится в теле, потому что я не хочу связываться с общей заголовочной страницей для script, которая применима только для этой страницы:

<script type="text/javascript">
function googleMapsQuery(accountNum) {
    // function code is here (omitted for brevity)
}
</script>

Это внутри блока td внутри блока tr внутри блока tbody внутри блока table внутри блока form внутри body:

<button id="google-422111" onclick="googleMapsQuery(422111)" type="button">Google This!</button>

Я даже переместил блок script над формой только в том случае, если порядок объявления script был релевантным (это не так).

script работает безупречно в FireFox и Chrome, но в IE 9 (с просмотром совместимости или без него) я получаю эту ошибку:

SCRIPT5007: значение свойства 'googleMapsQuery' равно null или undefined, а не объект Function

Я изучил область JavaScript, и я не могу понять, почему IE считает, что "googleMapsQuery" является свойством и почему он undefined. Это функция, и я ее определил!

Ответ 1

Я нашел ответ, и, несмотря на то, что я сообщил, он НЕ был браузером. Ошибка была в моем функциональном коде и произошла бы в любом браузере. Это сводится к этому. У меня было две строки в моем коде, которые были специально для FireFox/FireBug. Они использовали console.log. В IE они выбросили ошибку, поэтому я прокомментировал их (или так я думал). Я сделал дерьмовую работу, комментируя их, и сломал брекетинг в моей функции.

Оригинальный код (с консолью в нем):

if (sxti.length <= 50) console.log('sxti=' + sxti);
if (sxph.length <= 50) console.log('sxph=' + sxph);

Сломанный код (неправильные скобки внутри комментариев):

if (sxti.length <= 50) { //console.log('sxti=' + sxti); }
if (sxph.length <= 50) { //console.log('sxph=' + sxph); }

Фиксированный код (фиксированные скобки вне комментариев):

if (sxti.length <= 50) { }//console.log('sxti=' + sxti);
if (sxph.length <= 50) { }//console.log('sxph=' + sxph);

Итак, это было мое собственное неаккуратное кодирование. Функция действительно не была определена, потому что синтаксическая ошибка не позволяла ей закрываться.

Хорошо, живи и учись.;)

Ответ 2

У меня была аналогичная проблема с свойством null или undefined.

Это закончилось тем, что режим документа IE был по умолчанию установлен стандартами IE7. Это было связано с тем, что режим совместимости автоматически устанавливается для всех сайтов интрасети ( Сервис > Настройка представления совместимости > Отображать сайты интрасети в представлении совместимости > ).

Ответ 3

Вы пытались добавить точку с запятой в onclick="googleMapsQuery(422111);". Мне не хватает вашего кода, чтобы проверить, не приведет ли ошибка к точке с запятой, но т.е. Является более разборчивым в отношении синтаксиса.

Ответ 4

Всего несколько минут назад у меня возникла такая же проблема. У меня возникла проблема, связанная с тем, что сразу после запуска jQuery запускается другой сценарий jQuery. В конце концов, все будет хорошо.

Ответ 5

Итак, у меня была аналогичная ситуация с той же ошибкой. Я забыл, что изменил режим совместимости на своей машине dev, и у меня была консольная команда в моем javascript. Я изменил режим совместимости в IE и удалил команду console.log. Больше проблем.