เปลี่ยนข้อความฉลากโดยใช้ JavaScript


93

เหตุใดสิ่งต่อไปนี้จึงไม่เหมาะกับฉัน

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

1
โอ๊ะ! ขออภัยที่ควรจะ 'ไม่'; 0
phil crowe

4
เนื่องจากเมื่อคุณเขียนสคริปต์พยายามเปลี่ยนเลเบล innerHtml lbltipAddedComment จะไม่ปรากฏที่หน้า แทรกสคริปต์หลังป้ายกำกับหรือใช้ jquery $ (document) .ready ()
Andrew Orsich

ขออภัยไม่เห็นปุ่มแก้ไข!
phil crowe

ฉันลองทุกอย่างที่แนะนำที่นี่ แต่ไม่มีอะไรได้ผลสำหรับฉัน
Rajan Mishra

คำตอบ:


140

เนื่องจากสคริปต์ของคุณทำงานก่อนที่จะมีป้ายกำกับอยู่บนเพจ (ใน 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>

ฉันคิดว่า. text คำตอบของเนื้อหาเป็นคำตอบที่ถูกต้อง
Paul Taylor

1
ดี @PaulTaylor คำตอบนี้อยู่ที่นี่ตั้งแต่ปี 2010 และมี 92 upvotes (และตอนนี้การโหวตของคุณ) คำถามใช้ innerHTML ดังนั้นฉันจึงเปลี่ยนเฉพาะสิ่งที่จำเป็นเพื่อให้โค้ดของเขาเคลื่อนที่ ในขณะที่ฉันรู้สึกว่ามันเป็นเรื่องปกติที่จะแนะนำแนวคิดพิเศษ ("เฮ้ btw ใช้ textcontent แทน innerhtml / innertext) นั่นไม่ใช่ปัญหาของ OP ... ไม่จำเป็นต้องลดคะแนน
Konerak

โอเค แต่เขาเคยทำให้มันใช้งานได้หรือไม่ความคิดเห็นสุดท้ายของเขาคือไม่มีอะไรได้ผลดังนั้นฉันจึงเข้าใจว่าโซลูชันของคุณไม่ได้ผลไม่ได้ผลสำหรับฉันอย่างแน่นอนดูเหมือนว่าjsfiddle.net/cfxrLpe9/4นี้ทำงานกับ textContent แต่ไม่ใช่ innerHtml ทำไมถึงเป็น นั่น?
Paul Taylor

@PaulTaylor คำตอบอาจใช้ได้กับ OP ในขณะที่เขาทำเครื่องหมายคำตอบนี้ว่ายอมรับ คุณพิมพ์รหัสผิด คุณกำลังใช้ innerHtml แทน innerHTML ตามที่แสดงคำตอบ jsfiddle.net/cfxrLpe9/6
Randall Flagg

22

คุณได้ลอง.innerTextหรือ.valueแทนที่จะ.innerHTML?


.innerText ใช้กับป้ายกำกับ ฉันมีแท็กสคริปต์ภายใน <Head> และการออกแบบใน <body> แม้ว่ามันจะทำงานได้ดีสำหรับฉัน
ใจ

@AshwinG ความคิดเห็นของคุณเพิ่งช่วยฉัน ฉันเต้นหัวของฉัน.valueสำหรับlabel
Prabs

ลองใช้.text('Your Text')
ส่อเสียด

15

เนื่องจากไม่ได้โหลดองค์ประกอบฉลากเมื่อเรียกใช้สคริปต์ สลับองค์ประกอบป้ายกำกับและสคริปต์และจะใช้งานได้:

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

1
โอ้ไม่ได้สังเกต! ใช่หากรหัสที่โพสต์สะท้อนถึงรหัสจริง (ไม่ได้ใช้ jquery เพื่อเริ่มการทำงานบน document.ready หรือคล้ายกัน) นั่นเป็นเหตุผลว่าทำไมมันจึงไม่ทำงานเช่นกัน
GordonM

10

ใช้.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 เท่านั้น)
Andrew Willems

ขอบคุณฉันประสบปัญหาเดียวกัน
Paul Taylor

2
@AndrewWillems น่าเสียดาย.textContentและ.innerText(ในขณะที่ใช้งานได้ดีสำหรับการอ่าน) ไม่สามารถใช้งานกับ firefox60 ของฉันในการเขียนได้ (มันยังลบช่องป้อนข้อมูลที่ฝังไว้เช่นกัน.innerHTML) ดังนั้นฉันจึงต้องหันไปใช้document.getElementById('myLabel').childNodes[0].nodeValue="new label text"(แน่นอนดัชนีอาจเป็นอย่างอื่นจากนั้น 0 ซึ่งทำให้เป็นเรื่องเล็กน้อย แต่ก็ใช้ได้ผลกับฉัน)
Matija Nalis



0

ลองสิ่งนี้:

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

1
ยินดีต้อนรับลิงก์ไปยังโซลูชัน แต่โปรดตรวจสอบให้แน่ใจว่าคำตอบของคุณมีประโยชน์หากไม่มีมัน: เพิ่มบริบทรอบ ๆ ลิงก์เพื่อให้ผู้ใช้เพื่อนของคุณมีความคิดว่ามันคืออะไรและทำไมจึงอยู่ที่นั่นจากนั้นอ้างถึงส่วนที่เกี่ยวข้องที่สุดของเพจ การเชื่อมโยงอีกครั้งในกรณีที่หน้าเป้าหมายไม่พร้อมใช้งาน คำตอบที่มากกว่าลิงก์เพียงเล็กน้อยอาจถูกลบ
paper1111

0

เนื่องจากสคริปต์จะถูกเรียกใช้งานก่อน .. เมื่อสคริปต์จะถูกเรียกใช้งานการควบคุมในขณะนั้นจะไม่ได้รับการโหลด ดังนั้นหลังจากโหลดการควบคุมคุณจะต้องเขียนสคริปต์

มันจะทำงาน.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.