2012-08-22 16 views
16

Powiel możliwe:
Internet Explorer, Closure Compiler and Trailing Commassprawą dotyczącą przecinki poprzedzającej JavaScript

Próbowałem ściskając mój kod javascript używając Closure Compiler i kompilację kodu wygenerowanego tych dwóch błędów:

JSC_TRAILING_COMMA: Błąd analizy. IE8 (i poniżej) będą analizować niepoprawnie przecinki w tablicy i literałach obiektów. W przypadku kierowania na nowszych wersji JS, ustaw odpowiednią opcję language_in. w postaci linii 379 0 fontFamily. jqTextareaDiv.css ("tekstu dla dzieci") zastępuje (/ [ ""] {1}/Gi "")

JSC_TRAILING_COMMA. Błąd analizy IE8 (i poniżej .) będzie analizować spływu przecinki w tablicy i obiektów literałów nieprawidłowo Jeśli kierowania nowsze wersje JS ustawić odpowiednią opcję language_in na linii 932 znaków 0 fontFamily. jqDiv.css („font-family”),

Te dwa errrosy wydają się odnosić do tego kodu:

var jqTextareaDiv = obj.target.parent().parent(), 
          style = {  // the current, relevant style rules for the DIV nesting the textarea 
           fontFamily  : jqTextareaDiv.css("font-family").replace(/["']{1}/gi,""), 
           fontSize  : jqTextareaDiv.css("font-size"), 
           fontStyle  : jqTextareaDiv.css("font-style"), 
           fontWeight  : jqTextareaDiv.css("font-weight"), 
           textDecoration : jqTextareaDiv.css("text-decoration"), 
           textAlign  : jqTextareaDiv.css("text-align"), 
           color   : jqTextareaDiv.css("color"), 
          }, 
          jqToolbox = $('#text-edit-toolbox'), 
          jqIndicators = { 
           fontFamily    : $('#font-family-indicator'), 
           fontSize     : $('#font-size-indicator'), 
           fontStyle     : $('#font-format-indicators .font-style'), 
           fontWeight    : $('#font-format-indicators .font-weight'), 
           textDecorationUnderline : $('#font-format-indicators .underline'), 
           textDecorationLineThrough : $('#font-format-indicators .line-through'), 
           textAlignLeft    : $('#text-alignment-indicators .align-left'), 
           textAlignCenter   : $('#text-alignment-indicators .align-center'), 
           textAlignRight   : $('#text-alignment-indicators .align-right'), 
           textAlignJustify   : $('#text-alignment-indicators .align-justify') 
          }; 

Dokładnie jaki jest przecinek końcowy w tym przypadku i jak mogę go usunąć bez zerwania kodu?

+6

Cóż, końcowe przecinki to ... te końcowe.) Podążają za ostatnim elementem zadeklarowanej tablicy/obiektu. 'color: jqTextareaDiv.css (" color "),' jest tym, który znalazłem w twoim przykładzie, mogą być inne. W rzeczywistości ich lokalizacja została podana przez komunikat o błędzie; aby je naprawić, po prostu usuń przecinki w błądzącym sznurku. – raina77ow

+1

Wygląda również na to, że twoje wyrażenie, z nieokreślonymi cudzysłowami, może być przyczyną problemu. –

+0

Podano również powód ich usunięcia: końcowe przecinki nie pasują do IE8-. Jeśli nie potrzebujesz obsługi tych zwierząt, po prostu ustaw odpowiednio opcję 'language_in'. – raina77ow

Odpowiedz

32

tylnego przecinek to lista, która następuje końcowy element w tablicy lub obiektu dosłownym. Więc tak:

['a', 'b', 'c',] // with trailing comma 
['a', 'b', 'c'] // without trailing comma 

W tym przypadku następuje przecinek spływu ostatni element w obiekcie dosłownym:

color   : jqTextareaDiv.css("color"), 

Jeśli go usunąć, oczekiwane zachowanie będzie występować. Dzięki niemu IE < 9 tego nie polubi.

+0

Znalazłem i poprawiłem to, ale nie mogę znaleźć pierwszego, to jest (podobno) na tej samej linii z wywołaniem metody .replace() –

+0

@AndreiOniga Cóż, nie ma w tym nic złego. Domyślam się, że kompilator zamykający jest mylony z '' 'w regex - spróbuj go wydostać' \ "', aby dać kompilatorowi rękę ... – lonesomeday

+0

Właściwie to nie było. Po prostu nie zauważyłem tego po "color \t \t: jqTextareaDiv.css (" color ")", tylko ten drugi. Mój błąd. Dzięki! –

2

Masz przecinek końcowy w color : jqTextareaDiv.css("color"),. To byłoby pierwsze ostrzeżenie. Drugie ostrzeżenie jest prawdopodobnie podobną definicją gdzieś indziej w twoim kodzie.

3

to przecinek wzdłużny:

color   : jqTextareaDiv.css("color"), <<-- 
Powiązane problemy