web-dev-qa-db-fra.com

Chrome Erreur de syntaxe non capturée: jeton inattendu ILLEGAL

Duplicate possible:
SyntaxError: Jeton inattendu ILLEGAL

Réception de l'erreur de sujet lorsque Chrome tente de charger le fichier de script sur la page. Il dit que c'est à la dernière ligne du fichier javascript. Je n'arrive pas à trouver quoi que ce soit qui cloche. Aucune erreur dans Firefox, et le script fonctionne comme prévu. Juste en utilisant la validation de formulaire

// 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;
}​
137
agmcleod

Il y a une sorte de personnage factice à la fin de cette source. Essayez de supprimer la dernière ligne et de la rajouter.

Je n'arrive pas à comprendre exactement ce qu'il y a, pourtant ...

edit - Je pense que c'est un espace de largeur nulle, Unicode 200B. Cela semble assez étrange et je ne suis pas sûr, bien sûr, que ce n'est pas un artefact Stackoverflow, mais lorsque je copie/colle cette dernière fonction, y compris la dernière ligne complète, dans la console Chrome, j'obtiens votre erreur.

Une source notoire de tels personnages sont des sites tels que jsfiddle . Je ne dis pas qu'il y a quelque chose qui ne va pas chez eux - ce n'est qu'un effet secondaire de quelque chose, peut-être l'utilisation de widgets d'entrée modifiables par le contenu.

Si vous pensez que vous avez un problème de ce type et que vous êtes sous MacOS ou Linux/Unix, l'outil de ligne de commande od peut vous montrer (bien que de manière assez laide) les valeurs numériques des caractères. du fichier de code source. Certains IDE et éditeurs peuvent également afficher des caractères "drôles". Notez que ces caractères ne sont pas toujours un problème . Par exemple, il est parfaitement correct (dans la plupart des langages de programmation raisonnables) d'incorporer des caractères Unicode dans les constantes de chaîne. Les problèmes commencent à se produire lorsque l'analyseur de langage rencontre les caractères alors qu'il ne les attend pas.

259
Pointy

Je reçois la même erreur dans Chrome après le collage du code copié à partir de jsfiddle.

Si vous sélectionnez tout le code d'un panneau dans jsfiddle et le collez dans l'éditeur de texte libre Notepad ++, vous devriez pouvoir voir le caractère problématique comme un point d'interrogation "?" tout à la fin de votre code. Supprimez ce point d'interrogation, puis copiez et collez le code à partir de Notepad ++ et le problème aura disparu.

14
KurtWM

J'ai eu la même erreur lorsque la chaîne multiligne incluait des caractères de nouvelle ligne (\n). Fusionner toutes les lignes en une (en supprimant ainsi tous les nouveaux caractères de ligne) et les envoyer à un navigateur utilisé pour résoudre. Mais était très incommode pour coder.

Souvent, je ne comprenais pas pourquoi il s'agissait d'un problème dans Chrome jusqu'à ce que je tombe sur une déclaration indiquant que la version actuelle du moteur JavaScript dans Chrome ne prend pas en charge les chaînes multilignes encapsulées. entre guillemets simples et avoir des caractères de nouvelle ligne (\n). Pour que cela fonctionne, les chaînes multilignes doivent être entourées de guillemets doubles. Changer mon code pour cela a résolu ce problème.

Je vais essayer de trouver une référence à une norme ou Chrome doc qui le prouve. Jusque-là, essayez cette solution et voyez si cela fonctionne aussi pour vous.

11
Eye

J'ai eu la même erreur dans Chrome. La console Chrome m'a indiqué que l'erreur se trouvait dans la première ligne du fichier HTML.

C'était en fait dans le fichier .js. Alors faites attention à setValidNou(1060, $(this).val(), 0') types d'erreur.

2
Dragos Durlut