IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Erreur missing exponent javascript


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 230
    Par défaut Erreur missing exponent javascript
    J'ai une fonction javascript du type :
    Javascript:deletearticle(idarticle) et lorsque idarticle commence par un nombre ça me met l'erreur missing exponent sinon ça marche .

    Comment je peux résoudre le problème je tourne en rond et ne trouve pas de personne qui sont dans le même cas . Seulement si la variable comme par un nombre alors que la c'est la valeur .

    Merci pour votre aide je suis coincé

  2. #2
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Un peu de code, quelques mots sur le contexte nous auraient aidé à comprendre…

    En JavaScript, on ne peut pas utiliser des noms de variables qui commencent par un chiffre.

    Je vais t'expliquer pourquoi tu as ce message d'erreur. L'erreur missing exponent indique que JavaScript croit que tu lui donnes un nombre. Les nombres peuvent inclure un e quand tu utilises la notation scientifique, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1e3     =  1 * 10^3     =  1000
    2.75e2  =  2.75 * 10^2  =  275
    8.4e-1  =  8.4 * 10^-1  =  0.84
    Donc si tu essayes de nommer une variable avec un nombre suivi d'un e (majuscule ou minuscule), l'interpréteur se met en mode « reconnaissance de nombres », et si la partie qui suit le e n'est pas à nouveau un nombre, il signale une erreur de syntaxe.

    Maintenant, si ton but est de supprimer un élément HTML, il y a fort à parier que tu oublies les guillemets autour de l'id. Par exemple, à la place de deletearticle(2exyz), mets deletearticle("2exyz").

    Note que dans le code HTML, les id commençant par des nombres marchent en pratique, mais sont déconseillés.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 230
    Par défaut
    Voila le contexte j'utilise jqgrid et j'ai créer une classe qui étend la classe de base de jqgrid
    voici la fonction que j'utilise pour afficher une image dans la grille avec un lien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function showlinkajax (cellValue, options, rowdata) {
        var customFunction = options.colModel.formatoptions.function;
        var rowId = options.rowId;
        return "<a href='javascript:" + customFunction + "(" + rowId + ")'>" + cellValue + "</a>";
    }
    j'obtiens Nom : cature_ecran_toppro.png
Affichages : 232
Taille : 139,8 Ko

    mais quanq j'essaye de supprimer l'article 83082EG j'obtiens l'erreur : missing exponent
    Nom : capture_ecran_erreur.png
Affichages : 225
Taille : 132,6 Ko

    je block et trouve pas la solution

  4. #4
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    C'est donc bien un problème de guillemets. Regardons ton instruction return :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return "<a href='javascript:" + customFunction + "(" + rowId + ")'>" + cellValue + "</a>";
    Il y a plusieurs niveaux de complexité dans cette instruction car elle construit un bout de code HTML qui contient lui-même du code JavaScript. Je déconseille ce genre de pratique car, justement, elle conduit facilement à l'oubli de guillemets !

    Dans ton code, il se passe en gros la même chose que si tu appellais eval : tu fais interpréter une chaîne en tant que code JavaScript. Tu as donc la variable customFunction qui contient la chaîne "deleteArticle", suivie de la chaîne "(" suivie de la variable rowId suivie de ")". Alors, si rowId contient la chaîne "83082EG", tu te retrouves avec un code équivalent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "deleteArticle" + "(" + "83082EG" + ")"
    Une fois tout concaténé, cela donne la chaîne "deleteArticle(83082EG)" et c'est bien ce que tu vois dans ta console.
    À présent je pense que l'absence de guillemets autour de 83082EG te saute aux yeux ; au moment où cette chaîne est interprétée comme du code JavaScript, l'interpréteur voit quelque chose qui commence par un nombre avec un E derrière, essaye de l'interpréter en tant que notation scientifique, et échoue.

    Comme première solution rapide, plus un « patch d'urgence » qu'une vraie solution, je te propose de rajouter les guillemets manquants.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    return "<a href='javascript:" + customFunction + "(\"" + rowId + "\")'>" + cellValue + "</a>";
    // ---------------------------------------------là-^--------et là-^
    Tu seras d'accord avec moi : ça ne rend pas le code très facile à saisir au premier coup d’œil. Que tu choisisses le guillemet simple ' ou double ", tu es obligé de l'échapper car il est déjà utilisé pour délimiter soit la chaîne, soit l'attribut href.

    Note importante : les liens commençant par javascript: sont dépréciés. Au fil des années, avec le passage à XHTML puis HTML5, la sémantique du <a> a évolué, a été rendue plus stricte ; il a été décidé qu'un lien devrait servir uniquement à pointer vers des ressources distantes, et pas à servir de simple déclencheur de script, rôle qui est attribué aux boutons.

    Comme solution plus solide, je te propose donc de construire un bouton, avec la méthode du DOM, ce qui te permet d'éviter de « monter » dans les niveaux de complexité.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function showlinkajax (cellValue, options, rowdata) {
      var customFunction = options.colModel.formatoptions.function;
      var rowId = options.rowId;
     
      var $button = document.createElement("button");
      $button.innerHTML = cellValue;
      $button.title = "Supprimer cette ligne"; // (1)
      $button.onclick = function() {
        window[customFunction](rowId); // (2)
      };
     
      return $button; // (3)
    }
    En (1), c'est un bonus : un attribut title qui affiche une infobulle au survol. Ça marche aussi avec les liens. En fait, ça marche avec la plupart des éléments HTML. Ça ne coûte pas grand chose, c'est universel et ça ajoute de l'ergonomie.

    Il se passe une chose bizarre ici en (2) : c'est quoi ce mélange de crochets et de parenthèses ?
    La variable customFunction est une chaîne, or je veux appeler une fonction. Je ne me suis pas donné le droit de tricher avec un eval ; en revanche je sais que la fonction existe au niveau global, autrement dit sur l'objet window. Je vais donc utiliser la syntaxe des crochets.
    En effet, window["deleteArticle"] est équivalent à window.deleteArticle.
    Du coup, en appelant window[customFunction](rowId), c'est comme si j'appelais window.deleteArticle(rowId).

    Pour (3), attention : j'ai modifié le type de retour de ta fonction pour lui permettre de renvoyer une référence directe sur le bouton. Faute de quoi, si tu essayes de récupérer le code HTML du bouton (c'est possible, par exemple avec outerHTML), il est en réalité copié, et le onclick qui y était attaché est perdu.

    À l'endroit où tu appelles ta fonction showlinkajax, tu reçois non plus un bout de code HTML mais un élément DOM. Tu peux donc utiliser une méthode du DOM (appendChild, insertAdjacentHTML ou autre) pour l'insérer dans la structure de la page. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var $button42 = showlinkajax(...);
    document.getElementById("cell42").appendChild($button42);
    (en supposant que tu as un élément #cell42 dans ta page.)

    Dernière remarque : évidemment, un <button> n'a pas la même apparence qu'un lien. Pas de soucis, ça se règle en 4 lignes de CSS
    Code CSS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    button { border: none;
             background: none;
             padding: 0;
             cursor: pointer; }
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. [GLEW] Erreur: Missing GL version
    Par Yno dans le forum OpenGL
    Réponses: 8
    Dernier message: 01/12/2006, 18h52
  2. Struts layout affichage tableaux erreur: Missing resources
    Par bous_saad317 dans le forum Struts 1
    Réponses: 1
    Dernier message: 24/10/2006, 14h09
  3. Erreur CSS dans Javascript
    Par Are-no dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/08/2006, 15h04
  4. [JDBC] erreur missing select keyord
    Par harris_macken dans le forum JDBC
    Réponses: 2
    Dernier message: 11/07/2005, 14h05
  5. erreur de syntaxe javascript dans ma page
    Par Oluha dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 01/02/2005, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo