Синтаксис Chrome Uncaught: неожиданный токен НЕЗАКОННЫЙ

Возможный дубликат:
SyntaxError: Неожиданный токен НЕЗАКОННЫЙ

Получение предметной ошибки, когда Chrome пытается загрузить файл script на странице. Он говорит об этом в последней строке файла javascript. Кажется, я не вижу в этом ничего плохого. Ошибок в firefox нет, а script работает так, как ожидалось. Просто используя проверку формы

// JavaScript Document
$(function() {
  $('#wm-form').submit(function() {
    var errors = false;
    var errorMsg = "";
    $('.required').each(function() {
      if(!validField($(this))) {
        errorMsg += $(this).attr('name').capitalize() + " cannot be blank\n";
        errors = true;
      }
    });
    var emailAddress = $('#email');
    if(isValid(emailAddress) && !(/^(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+([;.](([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+)*$/.test(emailAddress.val()))) {
      errorMsg += "Not a valid email address. Please enter in a correctly formatted email address";
      errors = true;
    }
    if(errors) {
      alert(errorMsg);
      return false;
    }
  });

  $('.form-focus').click(function() {
    $(document).scrollTop(0);
    $('#first_name').focus();
    return false;
  });
});

function validField(element) {
  if(!isValid(element.val()) || (element.attr('placeholder') && element.attr('placeholder') == element.val()) || 
    (element.attr('type') == 'radio' && !checkedRadio(element))) {
    return false;
  }
  else {
    return true;
  }
}

function isValid(ele) {
  if(ele == null || ele == '') {
    return false;
  }
  else {
    return true;
  }
}

String.prototype.capitalize = function() {
    return this.charAt(0).toUpperCase() + this.slice(1);
};

function checkedRadio (element) {
  var valid = false;
  $('input[name="'+ element.attr("name") +'"]:checked').each(function() {
    valid = true;
  });

  return valid;
}​

Ответ 1

В конце этого источника есть какой-то фиктивный персонаж. Попробуйте удалить последнюю строку и добавить ее обратно.

Я не могу точно определить, что там, но...

edit — Я думаю, что это пространство с нулевой шириной, Unicode 200B. Кажется довольно странным, и я не уверен, конечно, что это не артефакт Stackoverflow, но когда я копирую/вставляю последнюю функцию, включая последнюю последнюю строку в консоль Chrome, я получаю вашу ошибку.

Известным источником таких символов являются веб-сайты, такие как jsfiddle. Я не говорю, что с ними что-то не так. это просто побочный эффект чего-то, возможно, использование виджета ввода, доступного для контента.

Если вы подозреваете, что у вас есть случай этого заболевания, и вы находитесь в MacOS или Linux/Unix, инструмент командной строки od может показать вам (хотя и довольно уродливым образом) числовые значения в символов исходного кода. Некоторые IDE и редакторы могут показывать "смешные" персонажи. Обратите внимание, что такие символы не всегда являются проблемой. Это совершенно нормально (на большинстве разумных языков программирования, так или иначе), чтобы там были встроенные символы Unicode в строковых константах, например. Проблемы начинаются, когда парсер синтаксического анализа встречает символы, когда он их не ожидает.

Ответ 2

Я получаю ту же ошибку в Chrome после вставки кода, скопированного из jsfiddle.

Если вы выберете весь код с панели в jsfiddle и вставьте его в текстовый редактор Notepad ++, вы должны увидеть характер проблемы как знак вопроса "?" в самом конце вашего кода. Удалите этот знак вопроса, затем скопируйте и вставьте код из Notepad ++, и проблема исчезнет.

Ответ 3

У меня была такая же ошибка, когда многострочная строка включала новые строки (\n). Объединение всех строк в один (таким образом, удаление всех новых символов строки) и отправка его в браузер, используемый для решения. Но было очень неудобно кодировать.

Часто не мог понять, почему это было проблемой в Chrome до тех пор, пока я не столкнулся с утверждением, в котором говорилось, что текущая версия движка JavaScript в Chrome не поддерживает многострочные строки, которые заключены в одинарные кавычки и имеют новую строку (\n). Чтобы заставить его работать, многострочная строка должна быть заключена в двойные кавычки. Изменив мой код, решив эту проблему.

Я попытаюсь найти ссылку на стандарт или документ Chrome, который доказывает это. До тех пор попробуйте это решение и посмотрите, работает ли оно для вас.

Ответ 4

У меня была такая же ошибка в Chrome. Консоль Chrome сообщила мне, что ошибка была в первой строке HTML файла.

Это было в файле .js. Поэтому следите за типами ошибок setValidNou(1060, $(this).val(), 0').