JavaScript kullanarak etiket metnini değiştirin


93

Aşağıdakiler neden benim için çalışmıyor?

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

1
oops! üzgünüm bu 'olmaz' olmalı; 0
phil crowe

4
Çünkü komut dosyası oluşturduğunuzda innerHtml etiketini değiştirmeye çalıştığınızda, lbltipAddedComment aslında sayfada yok. Etiket veya kullanım jquery $ (document) sonra komut .ready () takın
Andrew Orsich

üzgünüm, düzenleme düğmesini görmedim!
phil crowe

Burada önerilen her şeyi denedim ama hiçbir şey benim için işe yaramadı.
Rajan Mishra

Yanıtlar:


140

Komut dosyanız etiket sayfada (DOM'da) varolmadan ÖNCE çalıştığı için. Komut dosyasını etiketin arkasına koyun veya belge tamamen yüklenene kadar bekleyin ( jQuery ready()veya http://www.webreference.com/programming/javascript/onloads/ gibi bir Yüklemede işlevi kullanın )

Bu işe yaramaz:

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

Bu çalışacak:

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

Bu örnek (jsfiddle link) sırayı korur (önce komut dosyası, ardından etiket) ve bir onLoad kullanır:

<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>

Bence .textContent cevabı aslında doğru cevap
Paul Taylor

1
Pekala @PaulTaylor, bu cevap 2010'dan beri burada ve 92 olumlu oy (ve şimdi sizin olumsuz oyunuz) var. Soru innerHTML kullandı, bu yüzden sadece kodunu hareket ettirmek için gerekli olanı değiştirdim. Ekstra fikirler önermenin her zaman uygun olduğunu düşünsem de ("hey, btw, içhtml / iç metin yerine metin içeriği kullanın), bu OP'nin sorunu değildi ... Eksi oylamaya gerek yok.
Konerak

Tamam ama son yorumunu çalıştırdı mı hiç işe yaramadı, bu yüzden çözümünüz işe yaramadı, kesinlikle benim için işe yaramadı, bu jsfiddle.net/cfxrLpe9/4 textContent ile çalışıyor, ancak innerHtml ile çalışmıyor gibi görünüyordu , neden bu?
Paul Taylor

@PaulTaylor Cevap muhtemelen OP için işe yaradı çünkü bu yanıtı kabul edildi. Kodunuzda bir yazım hatası var. Cevabın gösterdiği gibi innerHTML yerine innerHtml kullanıyorsunuz. jsfiddle.net/cfxrLpe9/6
Randall Flagg

22

Eğer denediniz .innerTextveya .valueyerine .innerHTML?


.innerText, etiket için çalışır. <Head> içinde Script etiketi ve <body> içindeki tasarım var. Benim için iyi çalışsa da.
Jai

@AshwinG Yorumunuz beni kurtardı. Ben kafamı dövüyordu .valueiçinlabel
Prabs

Kullanmaya çalışın.text('Your Text')
sinsi

15

Çünkü bir betik yürütüldüğünde bir etiket öğesi yüklenmez. Etiket ve komut dosyası öğelerini değiştirin, işe yarayacaktır:

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

1
Oh, bunu fark etmedim! Evet, eğer gönderilen kod gerçek kodu yansıtıyorsa (jquery kullanarak belge üzerinde ateşleme yapmıyorsa, hazır veya benzeri), o zaman bu kodun işe yaramamasının bir nedenidir.
GordonM

10

.textContentBunun yerine kullanın .

Ben de bunu deneyene kadar bir etiketin değerini değiştirmekle uğraşıyordum.

Bu çözülmezse console.dir, bu soruda gösterildiği gibi konsola günlüğe kaydederek hangi özellikleri ayarlayabileceğinizi görmek için nesneyi incelemeyi deneyin : Bir HTML öğesini JavaScript nesnesi olarak nasıl günlüğe kaydedebilirim?


Teşekkür ederim. Kullanım durumumun şu sorudakine benzer olduğundan şüpheleniyorum (ancak kesin olarak onaylamadım): İç içe geçmiş bir giriş öğesi olan bir etiketin metnini almaya ve / veya değiştirmeye çalışıyordum, örneğin almak istedim ve / veya değiştirmek "enter info here:"aşağıdakilerden bölümünü: <label id='myLabel'>enter info here:<input type='text' id='inp'/></label>. Sadece .textContentçalıştı ve hiçbiri .innerHTML, .innerTextya da .valueçalıştı. (Feragatname: Yalnızca Chrome'da kontrol ettim.)
Andrew Willems

Teşekkür ederim ben de aynı sorunu
Paul Taylor

2
@AndrewWillems maalesef .textContentve .innerText(okumak için iyi olsa da), firefox60'ım için yazı yazmak için çalışmadı (aynı zamanda gömülü giriş alanını da sildi .innerHTML). Bu yüzden başvurmak zorunda kaldım document.getElementById('myLabel').childNodes[0].nodeValue="new label text"(elbette, endeks 0'dan başka bir şey olabilir, bu biraz garip ama benim için çalıştı)
Matija Nalis

9

Kullanmak .innerTextişe yaramalı.

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


0

Bunu dene:

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

1
Bir çözüme bağlantı memnuniyetle karşılanır, ancak lütfen cevabınızın o olmadan yararlı olduğundan emin olun: Bağlantının etrafına bağlam ekleyin, böylece kullanıcı arkadaşlarınız bunun ne olduğu ve neden orada olduğu konusunda fikir sahibi olurlar, ardından sayfanın en alakalı bölümünü alıntılayın ' hedef sayfanın mevcut olmaması durumunda yeniden bağlanma. Bir bağlantıdan biraz daha fazla olan cevaplar silinebilir.
paper1111

0

Çünkü betik ilk olarak çalıştırılacaktır .. Komut çalıştırıldığında, o sırada kontroller yüklenmez. Yani kontrolleri yükledikten sonra bir komut dosyası yazarsınız.

Çalışacak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.