Javascript против IE8 — Ожидаемый идентификатор, строка или число

#javascript #jquery #debugging #internet-explorer-8

#javascript #jquery #отладка #internet-explorer-8

Вопрос:

Нет, это не лишняя запятая.

Вот фрагмент, который вызывает у меня проблему.

 $(document).ready(function(){   
    $("div#slider").easySlider({
        auto: false,
        continuous: true,
        nextId: "nextBtn",
        prevId: "prevBtn"
    });

    $("div#slider-banner").easySlider({
        auto: true,
        continuous: true,
        controlsShow: false
    });
        // <---------------------------------- Line 14
    $("div#slider-photos").easySlider({
        auto: true,
        continuous: true,
        controlsShow: false
    });

    $("#marquee").marquee({
        scrollSpeed: 25,
        pauseSpeed: 2000,
        showSpeed: 850

    }); 
});
  

СВЕДЕНИЯ ОБ ОШИБКЕ

 User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET CLR 1.1.4322; Tablet PC 2.0; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)
Timestamp: Wed, 6 Apr 2011 15:20:42 UTC


Message: Expected identifier, string or number
Line: 14
Char: 5
Code: 0
  

Это происходит при случайных установках IE8, есть идеи?

Комментарии:

1. Вы неоднократно били по нему и выкрикивали непристойности? Обычно это работает при отладке IE. Теперь, возвращаясь к делу, вы пробовали удалять эти фрагменты кода? Зная IE и его понятность, можно было бы говорить о строке 14 плагина

2. да, и да, это фактически указывает это имя файла сразу после Code: 0

3. Значит, удаление отдельных фрагментов кода (блоков .easySlider() и .marquee() ) не помогло? Какую версию jQuery вы используете?

4. Похоже, что jQuery включен 1.5.2 . Вы пробовали последнюю версию: code.jquery.com/jquery-1.5.2.min.js ?

5. Если вы удалили блоки, а проблема все еще существует, то проблема должна быть вне блоков. Используете ли вы IE8 ? Вы видели, где возникает ошибка при запуске инструментов разработчика?

Ответ №1:

Попробуйте заключить все свойства вашего объекта в (двойные) кавычки, вот так:

 $("div#slider").easySlider({
    'auto': false,
    'continuous': true,
    'nextId': "nextBtn",
    'prevId': "prevBtn"
});
  

Комментарии:

1. Это была моя мысль — символ 5 совпадает с идентификаторами свойств. Я не думаю, что синтаксис неправильный для объектных литералов — но, возможно, одно из этих свойств имеет особое значение в нескольких из этих установок IE8? Или, может быть, существует проблема с пространством имен, которая появляется только в IE8 (возможно, только с режимом совместимости / без него)?

2. У меня была аналогичная проблема с доступом к свойству объекта через точечную нотацию внутри вложенной функции. Переключение на квадратные скобки решило проблему в IE8.

3. Я думаю, это может иметь какое-то отношение к ключам свойств, соответствующим ключевым словам? У меня была эта проблема со свойством объекта с именем default , и мне нужно было только заключить 'default' его в кавычки. Я думаю, что здесь IE сходит с ума от имени свойства объекта auto .

Ответ №2:

В 2015 году. если вас все еще волнует совместимость с IE8 (более или менее), моя проблема с этой ошибкой проявлялась только на действующем сервере, но не на localhost (см. рисунок). И это вызвало ошибку IE8 таким образом, что она перешла в режим совместимости с IE7, что также является тем же отстой, что и режим Quirks.

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

Например:

 $(document).ready(function(){
    $('#selector').func({
        rules: {
            parameter1: {
                option1: true,
                option2: 1,
                option3: 5
            }
        }, // <- this trailing comma is fatal to IE8
    });
});
  

Комментарии:

1. Операция началась с явного указания «Нет, это не лишняя запятая». Это нужно проверить в первую очередь в IE 🙂

Ответ №3:

У меня была аналогичная проблема с привязкой attr к классу knockout. Случилось так, что атрибут class пришлось заключить в кавычки, как ‘class’.