139 votes

Erreur de syntaxe non détectée dans Chrome : Unxpected Token ILLEGAL

Réception de l'erreur de sujet lorsque Chrome tente de charger le fichier script sur la page. Il est dit que c'est à la dernière ligne du fichier javascript. Je n'arrive pas à trouver quoi que ce soit d'anormal. Aucune erreur dans Firefox, et le script fonctionne comme prévu. J'utilise simplement 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;
}

0 votes

Même problème avec ajax lorsque j'utilise une classe php5 qui contient un écho supplémentaire pour le test, les données renvoyées par json deviennent invalides

0 votes

J'ai constaté que le problème est résolu si le fichier JSON retourné est dans un fichier de type LIGNE UNIQUE J'espère que cela vous aidera.

1 votes

Si vous rencontrez ce problème avec WordPress, mettez les scripts en file d'attente dans functions.php. J'avais un modèle spécifique pour lequel j'appelais le JS directement depuis le modèle. Le passage à une mise en file d'attente conditionnelle dans wp_head ou wp_footer a résolu le problème.

261voto

Pointy Points 172438

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

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

editar - Je pense que c'est un espace de largeur nulle, Unicode 200B. Cela semble assez bizarre et je ne peux pas être sûr que ce n'est pas un artefact de 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 ces personnages est constituée par des sites web tels que jsfiddle . Je ne dis pas qu'il y a quelque chose de mal avec eux - c'est juste un effet secondaire de quelque chose, peut-être l'utilisation de widgets de saisie modifiables par le contenu.

Si vous pensez être atteint de cette maladie, et que vous êtes sous MacOS ou Linux/Unix, l'outil d'aide à la décision de la Commission européenne est le suivant od peut vous montrer (bien que d'une manière assez moche) les valeurs numériques dans les caractères du fichier de code source. Certains IDE et éditeurs peuvent également afficher des caractères "amusants". Notez que ces caractères ne sont pas siempre un problème. Il est parfaitement acceptable (dans la plupart des langages de programmation raisonnables, en tout cas) que des caractères Unicode soient intégrés dans des constantes de chaîne, par exemple. Les problèmes commencent à se poser lorsque l'analyseur syntaxique du langage rencontre les caractères alors qu'il ne les attend pas.

2 votes

Merci d'avoir publié une solution à ce problème. Je n'ai pas cru au début que mon code ne fonctionnait pas à cause du copier/coller, mais j'ai pensé que je devais essayer et cela a réglé le problème.

1 votes

Dans mon cas, j'ai utilisé TextMate pour convertir les tabulations en espaces et tout s'est bien passé dans Chrome :) Bizarre.

0 votes

Dans mon cas, %0A cassait mon appel javascript nouvelle ligne.

14voto

KurtWM Points 111

J'obtiens la même erreur dans Chrome après avoir collé le code copié depuis jsfiddle.

Si vous sélectionnez tout le code d'un panneau dans jsfiddle et le collez dans l'éditeur de texte gratuit Notepad++, vous devriez pouvoir voir le caractère problématique sous la forme d'un point d'interrogation " ?" à la toute fin de votre code. Supprimez ce point d'interrogation, puis copiez et collez le code depuis Notepad++ et le problème disparaîtra.

11voto

Eye Points 1329

J'ai eu la même erreur lorsque la chaîne multiligne incluait une nouvelle ligne ( \n ). La fusion de toutes les lignes en une seule (ce qui supprime tous les caractères des nouvelles lignes) et l'envoi à un navigateur permettaient de résoudre le problème. Mais c'était très peu pratique à coder.

Souvent, je n'arrivais pas à comprendre pourquoi c'était un problème dans Chrome jusqu'à ce que je tombe sur une déclaration disant que la version actuelle du moteur JavaScript dans Chrome ne supporte pas les chaînes de caractères multilignes qui sont enveloppées dans des guillemets simples et ont une nouvelle ligne ( \n ) dans celles-ci. Pour que cela fonctionne, les chaînes multilignes doivent être placées entre guillemets. En modifiant mon code comme suit, j'ai résolu ce problème.

Je vais essayer de trouver une référence à une norme ou à un document de Chrome qui le prouve. En attendant, essayez cette solution et voyez si elle fonctionne pour vous aussi.

0 votes

Qu'en est-il des chaînes de caractères délimitées par un backtick ?

0 votes

Les backticks, c'est-à-dire les littéraux de modèle, ont été introduits assez récemment dans l'ECMAScript 6. Au moment de la rédaction de ce document (2012), les backticks n'existaient pas. Mais, maintenant, oui, ils devraient fonctionner, si le navigateur le supporte. Cela signifie que les backticks ne sont pas compatibles avec tous les navigateurs, ce qui reste risqué. De nombreux utilisateurs utilisent encore d'anciens navigateurs de bureau et mobiles. Je vous suggère de continuer à utiliser les guillemets doubles.

2voto

Dragos Durlut Points 2258

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X