Змініть текст мітки за допомогою JavaScript


90

Чому наступне не працює для мене?

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

1
ой! вибачте, що повинно бути "не"; 0
Філ Кроу

4
Оскільки під час сценарію ви намагаєтесь змінити мітку innerHtml, lbltipAddedComment насправді не присутній на сторінці. Вставити сценарій після мітки або використовувати jquery $ (документ) .ready ()
Ендрю Орсіч

вибачте, не побачив кнопку редагування!
Філ Кроу

я спробував усе запропоноване тут, але мені нічого не вдалося.
Раджан Мішра

Відповіді:


137

Оскільки ваш скрипт працює ДО того, як мітка існує на сторінці (у DOM). Або поставте сценарій після мітки, або почекайте, поки документ повністю завантажиться (використовуйте функцію OnLoad, наприклад, jQuery ready()або http://www.webreference.com/programming/javascript/onloads/ )

Це не спрацює:

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

Це буде працювати:

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

Цей приклад (посилання jsfiddle) підтримує порядок (спочатку сценарій, а потім мітка) і використовує 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>

Я думаю, що .textContent відповідь насправді правильна
Пол Тейлор

1
Ну @PaulTaylor, ця відповідь тут з 2010 року і налічує 92 голоси проти (і тепер, ваш голос проти). У запитанні використовувався innerHTML, тому я змінив лише те, що було потрібно, щоб його код рухався. Хоча я вважаю, що це завжди нормально пропонувати додаткові ідеї ("привіт, до речі, використовуй textcontent замість innerhtml / innertext), це не було проблемою OP ... Не потрібно голосувати проти.
Конерак

Гаразд, але чи коли-небудь він працював, його останній коментар був, що нічого не працювало, тому, на мою думку, ваше рішення не працювало, сертифіковано не працювало для мене, схоже, цей jsfiddle.net/cfxrLpe9/4 працює з textContent, але не innerHtml, чому що?
Пол Тейлор,

@PaulTaylor Відповідь, мабуть, спрацювала для ОП, оскільки він позначив цю відповідь як прийняту. У вашому коді є помилка. Як показує відповідь, ви використовуєте innerHtml замість innerHTML. jsfiddle.net/cfxrLpe9/6
Randall Flagg

22

Ви пробували .innerTextчи .valueзамість .innerHTML?


.innerText працює для етикетки. У мене є тег Script у <Head>, а дизайн у <body>. Хоча це добре працює для мене.
Джай

@AshwinG Ваш коментар мене щойно врятував. Я бив голову .valueзаlabel
Прабс

Спробуйте використати.text('Your Text')
підлий

15

Оскільки елемент мітки не завантажується під час виконання сценарію. Поміняйте місцями мітку та елементи сценарію, і це буде працювати:

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

1
О, не помітив цього! Так, якщо розміщений код відображає справжній код (не використовує jquery для запуску на document.ready або подібний), то це причина, чому він також не буде працювати.
GordonM

9

Використання .innerTextповинно спрацювати.

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

9

Використовуйте .textContentзамість цього.

Я теж боровся зі зміною значення етикетки, поки не спробував цього.

Якщо це не допомогло, спробуйте перевірити об'єкт, щоб побачити, які властивості ви можете встановити, ввівши його в консоль, console.dirяк показано на це запитання: Як я можу зареєструвати елемент HTML як об'єкт JavaScript?


Дякую. Я підозрюю (але не ретельно підтвердив), що мій варіант використання подібний до запитання: я намагався отримати та / або змінити текст мітки, що має вкладений елемент введення, наприклад, я хотів отримати та / або змінити "enter info here:"частину наступного: <label id='myLabel'>enter info here:<input type='text' id='inp'/></label>. Тільки .textContentпрацював, і жоден з них .innerHTML, .innerTextабо .valueпрацював. (Застереження: я зареєструвався лише в Chrome.)
Ендрю Віллемс,

Спасибі, я зіткнувся з тією ж проблемою
Пол Тейлор

2
@AndrewWillems, на жаль, .textContentі .innerText(хоча добре для читання), не працював для мого firefox60 для написання (він також стер вбудоване поле введення, як і .innerHTML). Отже, мені довелося вдатися до document.getElementById('myLabel').childNodes[0].nodeValue="new label text"(звичайно, індекс може бути дещо іншим, ніж 0, що робить трохи кладер, але це спрацювало для мене)
Матія Наліс


0

Спробуйте це:

<label id="lbltipAddedComment"></label>
<script type="text/javascript"> 
      document.getElementById('<%= lbltipAddedComment.ClientID %>').innerHTML = 'your tip has been submitted!';
</script>

1
Посилання на рішення вітається, але будь ласка, переконайтесь, що ваша відповідь корисна без нього: додайте контекст навколо посилання, щоб ваші однодумці мали певне уявлення, що це таке і чому воно є, а потім цитуйте найбільш релевантну частину сторінки, яку ви “ повторне посилання на випадок, якщо цільова сторінка буде недоступна. Відповіді, які є лише кількома посиланнями, можуть бути видалені.
paper1111

0

Тому що сценарій буде виконаний першим .. Коли сценарій буде виконаний, в той час елементи керування не завантажуються. Отже, після завантаження елементів керування ви пишете сценарій.

Це спрацює.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.