2017-10-04 3 views
0

Je suis en train d'afficher dans un div texte différent basé sur 2 valeurs comparaison:Erreur « Uncaught TypeError: peut-il bien non défini « innerHTML » null » même si une partie du script est à la fin

<dom-module id="my-view1" theme-for="vaadin-grid"> 
<template is="dom-bind" id="transparent-template"> 

<iron-ajax auto url="http://localhost:8808/datal4/" handle-as="json" last-response="{{top}}"></iron-ajax> 


    <vaadin-grid id="transparent-header" items="[[top.top]]" size="10" > 
    <vaadin-grid-column width="50px" flex-grow="0"> 
    <template class="header">#</template> 
    <template><div>{{displayIndex(index)}}</div></template> 
    </vaadin-grid-column> 
     <vaadin-grid-column resizable> 
     <template class="header">Evolution</template> 
     <template><div id="div_id">{{changeimg(item.score, item.oldscore)}}</div></template> 

     </vaadin-grid-column> 

    </vaadin-grid> 
    </template> 
    </body> 
    <script> 

Polymer({ 
    is: 'my-view1', 
     changeimg: function(score, oldscore) { 

     var imagid = document.getElementById('div_id'); 

     if(score>oldscore){imagid.innerHTML = "bigger";} 
     else if(score<oldscore){imagid.innerHTML ="smaller";} 
     else {imagid.innerHTML = "equal";} 

    } </script> 

Dans la console j'ai "Uncaught TypeError: Impossible de définir la propriété 'innerHTML' de null" et sur la page seule la première cellule de la grille est remplie avec la mauvaise valeur (égale - quand elle devrait être plus petite) à propos de mêmes questions partout sur internet avant de poster ici mais je ne sais vraiment pas ce que j'ai fait de mal ...

+1

ID de doit être unique. Vous utilisez le même identifiant pour tous les div. – Ofisora

+0

Un conseil pour le résoudre? À la place, utiliser class et document.getElementsByClassName ne fonctionnait pas non plus ... – vlucian

+0

à la fin cela fonctionnait avec div id = "div_id _ [[index]]" et ensuite en l'utilisant aussi dans la fonction: var imagid = document.getElementById (" div_id _ "+ index); Merci! – vlucian

Répondre

0

Vous n'avez en fait besoin d'aucune référence à un élément, car la liaison de données fournit l'effet recherché. Vous pouvez simplement renvoyer le texte souhaité dans la changeimg() reliure:

changeimg: function(score, oldscore) { 
    if (score > oldscore) { 
    return "bigger"; 
    } else if (score < oldscore) { 
    return "smaller"; 
    } else { 
    return "equal"; 
    } 
} 

Pour le modèle suivant. la valeur de retour de changeimg() apparaît comme le contenu du texte du <div>:

<div>{{changeimg(item.score, item.oldscore}}</div> 

demo

+0

En effet, d'un point de vue pratique, cela pourrait être résolu comme ça, mais je veux résoudre ce cas particulier/théorique - parce qu'en fait je cherche un moyen d'afficher un autre image basée sur cette comparaison (flèche verte, flèche rouge ...) donc ça devrait être comme: document.getElementById ("blaah"). src = "blaah"; Bien sûr, j'ai eu la même erreur avec ça. Mais je pense que Ofisora ​​a raison -J'utilise le même id pour tous les divs dans la boucle. – vlucian