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

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

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

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

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

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

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

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

SCRIPT5007: The value of the property 'googleMapsQuery' is null or undefined, not a Function object

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

 Patrick Lee Scott12 апр. 2012 г., 20:05
тело является идеальным местом для сценария, в нижней части тела на самом деле предпочтительнее :)
 Steve H.12 апр. 2012 г., 20:10
Теги сценария в заголовке обрабатываются синхронно (последовательно) перед обработкой тела. Теги сценариев в теле загружаются асинхронно вместе с другими сценариями и остальными узлами DOM ... Я не использую кнопку & lt; button & gt; я использую & lt; тип ввода = & quot; кнопка & quot; & gt;

Ответы на вопрос(5)

Это закончилось тем, что режим документа IE по умолчанию соответствовал стандартам IE7. Это произошло из-за того, что режим совместимости был автоматически установлен для использования на всех сайтах интрасети (Tools & GT;Compatibility View Setting & GT;Display Intranet Sites in Compatibility View).

 24 июн. 2015 г., 15:03
Это мне очень помогло - эта страница была первым попаданием для поиска в Google по запросу & quot; значение свойства равно null или undefined, а не объекту Function, и это было именно то решение, которое мне было нужно. Тогда спасибо!

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

 chriv13 апр. 2012 г., 21:47
Это была не точка с запятой. Эта функция была действительно неопределенной из-за неаккуратного комментирования и заключения в скобки с моей стороны. Истинная синтаксическая ошибка, которая помешала бы моему скрипту даже компилироваться, если бы это был исполняемый код. ;)

что изменил режим совместимости на своем компьютере разработчика, и у меня была команда console.log в моем javascript. Я изменил режим совместимости обратно в IE и удалил команду console.log. Нет больше проблем.

Решение Вопроса

и, несмотря на то, что я сообщил, он НЕ был специфичным для браузера. Ошибка была в моем коде функции, и могла произойти в любом браузере. Это сводится к этому. В моем коде было две строки, которые были специфичны для 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);

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

Ну что ж, жить и учиться. ;)

сайте, используемом в моей организации. Чтобы решить эту проблему, мне пришлось добавить в список сайтов "Надежный сайт".

Для этого:

Click the Tools button, and then Internet options. Go on the Security tab. Click on Trusted sites and then on the sites button. Enter the url of the website and click on Add.

Я оставляю это здесь, в удаленном случае, это кому-то поможет.

Ваш ответ на вопрос