Modifier le texte de l'étiquette à l'aide de JavaScript

90

Pourquoi ce qui suit ne fonctionne-t-il pas pour moi?

<script>
    document.getElementById('lbltipAddedComment').innerHTML = 'Your tip has been submitted!';
</script>
<label id="lbltipAddedComment"></label>
Phil Crowe
la source
1
Oups! désolé, cela devrait être `` ne pas ''; 0
phil crowe
4
Parce que lorsque vous créez un script, essayez de modifier l'étiquette innerHtml, lbltipAddedComment n'est pas présent sur la page. Insérez le script après l'étiquette ou utilisez jquery $ (document) .ready ()
Andrew Orsich
désolé je n'ai pas vu le bouton d'édition!
phil crowe
J'ai essayé tout ce qui est suggéré ici mais rien n'a fonctionné pour moi.
Rajan Mishra

Réponses:

137

Parce que votre script s'exécute AVANT que l'étiquette existe sur la page (dans le DOM). Placez le script après l'étiquette ou attendez que le document soit complètement chargé (utilisez une fonction OnLoad, telle que jQuery ready()ou http://www.webreference.com/programming/javascript/onloads/ )

Cela ne fonctionnera pas:

<script>
  document.getElementById('lbltipAddedComment').innerHTML = 'your tip has been submitted!';
</script>
<label id="lbltipAddedComment">test</label>

Cela fonctionnera:

<label id="lbltipAddedComment">test</label>
<script>
  document.getElementById('lbltipAddedComment').innerHTML = 'your tip has been submitted!';
</script>

Cet exemple (lien jsfiddle) maintient l'ordre (script d'abord, puis étiquette) et utilise un onLoad:

<label id="lbltipAddedComment">test</label>
<script>
function addLoadEvent(func) {  
      var oldonload = window.onload;  
      if (typeof window.onload != 'function') {  
        window.onload = func;  
      } else {  
        window.onload = function() {  
          if (oldonload) {  
            oldonload();  
          }  
          func();  
        }  
      }  
    }  

   addLoadEvent(function() {  
document.getElementById('lbltipAddedComment').innerHTML = 'your tip has been submitted!';

    });  
</script>
Konerak
la source
Je pense que la réponse .textContent est en fait la bonne
Paul Taylor
1
Eh bien @PaulTaylor, cette réponse est là depuis 2010 et a 92 votes positifs (et maintenant, votre vote négatif). La question utilisait innerHTML donc je n'ai changé que ce qui était nécessaire pour faire bouger son code. Bien que je pense qu'il est toujours acceptable de suggérer des idées supplémentaires ("hé, btw, utilisez textcontent au lieu de innerhtml / innertext), ce n'était pas le problème d'OP ... Il n'est pas nécessaire de voter contre.
Konerak
D'accord, mais est-ce qu'il l'a jamais fait fonctionner son dernier commentaire était que rien n'a fonctionné, donc j'ai compris que votre solution ne fonctionnait pas, certainement pas pour moi, semble que jsfiddle.net/cfxrLpe9/4 fonctionne avec textContent mais pas innerHtml, pourquoi cette ?
Paul Taylor
@PaulTaylor La réponse a probablement fonctionné pour l'OP car il a marqué cette réponse comme acceptée. Vous avez une faute de frappe dans votre code. Vous utilisez innerHtml au lieu de innerHTML comme le montre la réponse. jsfiddle.net/cfxrLpe9/6
Randall Flagg
22

Avez-vous essayé .innerTextou à la .valueplace de .innerHTML?

GordonM
la source
.innerText fonctionne pour l'étiquette. J'ai la balise Script dans <Head> et le design dans <body>. Même si cela fonctionne bien pour moi.
Jai
@AshwinG Votre commentaire vient de me sauver. Je me .valuelabel
battais la
Essayez d'utiliser.text('Your Text')
sournois
15

Parce qu'un élément d'étiquette n'est pas chargé lorsqu'un script est exécuté. Échangez les éléments d'étiquette et de script, et cela fonctionnera:

<label id="lbltipAddedComment"></label>
<script>
    document.getElementById('lbltipAddedComment').innerHTML = 'Your tip has been submitted!';
</script>
mvladic
la source
1
Oh, je n'ai pas remarqué ça! Oui, si le code publié reflète le code réel (n'utilise pas jquery pour tirer sur document.ready ou similaire), c'est une raison pour laquelle cela ne fonctionnerait pas aussi bien.
GordonM
9

Utilisez .textContentplutôt.

J'avais également du mal à changer la valeur d'un label, jusqu'à ce que j'essaye cela.

Si cela ne résout pas, essayez d'inspecter l'objet pour voir quelles propriétés vous pouvez définir en le connectant à la console avec console.dircomme indiqué sur cette question: Comment puis-je enregistrer un élément HTML en tant qu'objet JavaScript?

Pochi
la source
Merci. Je soupçonne (mais je n'ai pas rigoureusement confirmé) que mon cas d'utilisation est similaire à celui de la question: j'essayais de récupérer et / ou de modifier le texte d'une étiquette qui a un élément d'entrée imbriqué, par exemple je voulais récupérer et / ou modifier la "enter info here:"partie de ce qui suit: <label id='myLabel'>enter info here:<input type='text' id='inp'/></label>. Seulement .textContenttravaillé, et aucun .innerHTML, .innerTextou .valuetravaillé. (Clause de non-responsabilité: je n'ai vérifié que dans Chrome.)
Andrew Willems
Merci, j'ai rencontré le même problème
Paul Taylor
2
@AndrewWillems malheureusement .textContentet .innerText(bien que bien pour la lecture), n'a pas fonctionné pour mon firefox60 pour l'écriture (il a également effacé le champ de saisie intégré, tout comme .innerHTML). J'ai donc dû recourir à document.getElementById('myLabel').childNodes[0].nodeValue="new label text"(bien sûr, l'index peut être autre chose que 0, ce qui fait un peu kludgy mais a fonctionné pour moi)
Matija Nalis
8

L'utilisation .innerTextdevrait fonctionner.

document.getElementById('lbltipAddedComment').innerText = 'your tip has been submitted!';
Shilpa
la source
7

Voici une autre façon de modifier le texte d'une étiquette à l'aide de jQuery:

<script>
  $("#lbltipAddedComment").text("your tip has been submitted!");
</script>

Consultez l' exemple JsFiddle

mustapha mekhatria
la source
0

Essaye ça:

<label id="lbltipAddedComment"></label>
<script type="text/javascript"> 
      document.getElementById('<%= lbltipAddedComment.ClientID %>').innerHTML = 'your tip has been submitted!';
</script>
user1611219
la source
1
Un lien vers une solution est le bienvenu, mais veuillez vous assurer que votre réponse est utile sans elle: ajoutez du contexte autour du lien pour que vos collègues utilisateurs aient une idée de ce que c'est et pourquoi il est là, puis citez la partie la plus pertinente de la page que vous '' relier au cas où la page cible ne serait pas disponible. Les réponses qui ne sont guère plus qu'un lien peuvent être supprimées.
paper1111
0

Parce que le script sera exécuté en premier. Lorsque le script sera exécuté, à ce moment-là, les contrôles ne seront pas chargés. Donc, après le chargement des contrôles, vous écrivez un script.

Ça va marcher.

Rachana
la source