Je reçois NaN lorsque je tente d'insérer du code HTML dans un élément DIV avec jQuery

StackOverflow https://stackoverflow.com/questions/2920360

  •  05-10-2019
  •  | 
  •  

Question

Je suis Tring pour afficher une zone de texte lorsqu'un élément de classe numObj est cliqué. Pour une raison quelconque, je reçois NaNNaNaNaNNaNNaNaNaN où je pense à voir le résultat de la variable searchForm dans le code ci-dessous.

Je sais que NaN signifie pas un numéro. Ce que je ne comprends pas pourquoi Javascript attend un certain nombre? Je ne comprends pas pourquoi il prend soin.

$(".numObj").live('click',function(){
   var preId = $(this).attr('preId');
   var arrayPos = $(this).attr('numArrayPos');

        alert(preId +" "+arrayPos);

        var searchForm = "<table border='0' cellspacing='0' cellpadding='4' id='add-tag2'>"+
          +"<tr class='normal'><td bgcolor='#EEEEEE' valign='bottom' nowrap='nowrap'><span class='normal-small'>"+
          +"<input name='predicate-name2' type='text' class='normal' id='predicate-name2' size='4' />"+
          +"</span></td>"+
          +"<td bgcolor='#EEEEEE' valign='bottom' nowrap='nowrap'><span class='normal-small'>&lt;=</span></td>"+
          +"<td bgcolor='#EEEEEE' valign='bottom' nowrap='nowrap'>x</td>"+
          +"<td valign='bottom' bgcolor='#EEEEEE'>&lt;=</td>"+
          +"<td valign='bottom' bgcolor='#EEEEEE'><span class='normal-small'>"+
          +"<input type='text' name='object-object2' id='object-object2' class='normal' size='4' />"+
          +"</span></td>"+
          +"</tr>"+
          +"</table>";
        $(".numObj").filter("[preId='"+preId+"']").filter("[numArrayPos='"+arrayPos+"']").html(searchForm);

    }); 

Le code généré qui a la classe numObj ressemble à quelque chose comme ceci

<td><div class="numObj" preid="73" numarraypos="5"><span class="normal">585.0</span></div></td>
Était-ce utile?

La solution

Le problème, comme d'autres l'ont souligné est l'opérateur +. Mis à part les chaînes concaténer, il est également utilisé comme plus mathématique. En raison du typage dynamique Javascript, l'utilisation de + unaire seul sur une chaîne entraînera la chaîne à convertir en un certain nombre:

+"12"; // -> 12
+"10" + +"12" // -> 22

Plusieurs lignes de code ont l'opérateur + à la fin de la ligne et le début de la nouvelle ligne . La deuxième + sera traitée comme une addition mathématique unaire et tentera de convertir la chaîne en numéro . Considérez ce qui suit:

"Hello" +
+ "World" // -> "HelloNaN" 

Autres conseils

Vous avez plusieurs opérateurs, plus à côté de l'autre.

var searchForm = "<table border='0' cellspacing='0' cellpadding='4' id='add-tag2'>"+
+"<tr class='normal'><td bgcolor='#EEEEEE' valign='bottom' nowrap='nowrap'><span class='normal-small'>"+

Notez qu'il existe un opérateur plus à la fin de la première ligne, et un au début de la dernière ligne. Retirer un de ces opérateurs (ainsi que pour chaque ligne), et vous aurez probablement se débarrasser de l'erreur.

Par ailleurs, JSLint trouve ces erreurs dans un tournemain.

Prenez les symboles + l'extrémité de chaque ligne var searchForm

var searchForm = "<table border='0' cellspacing='0' cellpadding='4' id='add-tag2'>"
      +"<tr class='normal'><td bgcolor='#EEEEEE' valign='bottom' nowrap='nowrap'><span class='normal-small'>"
      +"<input name='predicate-name2' type='text' class='normal' id='predicate-name2' size='4' />"
      +"</span></td>"
      +"<td bgcolor='#EEEEEE' valign='bottom' nowrap='nowrap'><span class='normal-small'>&lt;=</span></td>"
      +"<td bgcolor='#EEEEEE' valign='bottom' nowrap='nowrap'>x</td>"
      +"<td valign='bottom' bgcolor='#EEEEEE'>&lt;=</td>"
      +"<td valign='bottom' bgcolor='#EEEEEE'><span class='normal-small'>"
      +"<input type='text' name='object-object2' id='object-object2' class='normal' size='4' />"
      +"</span></td>"
      +"</tr>"
      +"</table>";

Faire toute la variable de searchForm existent que sur une seule ligne fait fonctionner ... mais ce n'est pas élégant. S'il y a des meilleures solutions, je serais très curieux de savoir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top