Thay đổi văn bản nhãn bằng JavaScript


90

Tại sao những điều sau đây không hiệu quả với tôi?

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

1
Giáo sư! xin lỗi mà nên 'doesnt'; 0
phil Crowe

4
Bởi vì khi bạn tập lệnh cố gắng thay đổi nhãn innerHtml, lbltipAddedComment thực sự không hiển thị trên trang. Chèn script sau nhãn hoặc sử dụng jquery $ (document) .ready ()
Andrew Orsich

xin lỗi không thấy nút chỉnh sửa!
phil crowe

tôi đã thử mọi thứ được đề xuất ở đây nhưng không có gì hiệu quả với tôi.
Rajan Mishra

Câu trả lời:


137

Bởi vì tập lệnh của bạn chạy TRƯỚC khi nhãn tồn tại trên trang (trong DOM). Đặt tập lệnh sau nhãn hoặc đợi cho đến khi tài liệu được tải đầy đủ (sử dụng hàm OnLoad, chẳng hạn như jQuery ready()hoặc http://www.webreference.com/programming/javascript/onloads/ )

Điều này sẽ không hoạt động:

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

Điều này sẽ hoạt động:

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

Ví dụ này (liên kết jsfiddle) duy trì thứ tự (script trước, sau đó đến nhãn) và sử dụng 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>

Tôi nghĩ câu trả lời .textContent thực sự là câu trả lời chính xác
Paul Taylor

1
Chà @PaulTaylor, câu trả lời này ở đây từ năm 2010 và có 92 phiếu ủng hộ (và bây giờ là phiếu phản đối của bạn). Câu hỏi sử dụng innerHTML nên tôi chỉ thay đổi những gì cần thiết để mã của anh ấy chuyển động. Mặc dù tôi cảm thấy luôn luôn ổn khi đề xuất các ý tưởng bổ sung ("này, btw, sử dụng textcontent thay vì innerhtml / innertext), đó không phải là vấn đề của OP ... Không cần thiết phải phản đối.
Konerak

Được rồi, nhưng anh ấy đã bao giờ làm cho nó hoạt động nhận xét cuối cùng của anh ấy là không có gì hoạt động vì vậy tôi hiểu rằng giải pháp của bạn không hoạt động, hoàn toàn không hoạt động với tôi, có vẻ như jsfiddle.net/cfxrLpe9/4 này hoạt động với textContent nhưng không phải innerHtml, tại sao vậy cái đó ?
Paul Taylor

@PaulTaylor Câu trả lời có thể phù hợp với OP vì anh ấy đã đánh dấu câu trả lời này là được chấp nhận. Bạn có một lỗi đánh máy trong mã của bạn. Bạn đang sử dụng innerHtml thay vì innerHTML như câu trả lời hiển thị. jsfiddle.net/cfxrLpe9/6
Randall Flagg

22

Bạn đã thử .innerTexthoặc .valuethay vì .innerHTML?


.innerText hoạt động cho nhãn. Tôi có thẻ Script trong <Head> và thiết kế trong <body>. Mặc dù nó hoạt động tốt đối với tôi.
Jai

@AshwinG Bình luận của bạn vừa cứu tôi. Tôi đang đập lên đầu tôi .valuecholabel
Prabs

Cố gắng sử dụng.text('Your Text')
lén lút

15

Bởi vì một phần tử nhãn không được tải khi một tập lệnh được thực thi. Hoán đổi các phần tử nhãn và tập lệnh, và nó sẽ hoạt động:

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

1
Ồ, không nhận thấy điều đó! Có, nếu mã đã đăng phản ánh mã thực (không sử dụng jquery để kích hoạt trên document.ready hoặc tương tự) thì đó là lý do tại sao nó cũng không hoạt động.
GordonM

9

Sử dụng .textContentthay thế.

Tôi cũng đang vật lộn với việc thay đổi giá trị của một nhãn cho đến khi tôi thử điều này.

Nếu điều này không giải quyết được, hãy thử kiểm tra đối tượng để xem bạn có thể đặt thuộc tính nào bằng cách đăng nhập nó vào bảng điều khiển với console.dirnhư được hiển thị trong câu hỏi này: Làm cách nào để ghi nhật ký một phần tử HTML dưới dạng một đối tượng JavaScript?


Cảm ơn bạn. Tôi nghi ngờ (nhưng chưa xác nhận chặt chẽ) rằng trường hợp sử dụng của tôi tương tự như trường hợp trong câu hỏi: Tôi đang cố gắng truy xuất và / hoặc thay đổi văn bản của nhãn có phần tử đầu vào lồng nhau, ví dụ: tôi muốn truy xuất và / hoặc thay đổi "enter info here:"một phần của những điều sau đây: <label id='myLabel'>enter info here:<input type='text' id='inp'/></label>. Chỉ .textContenthoạt động, và không có .innerHTML, .innerTexthoặc .valuehoạt động. (Disclaimer: Tôi chỉ kiểm tra trong Chrome.)
Andrew Willems

Cảm ơn bạn, tôi đã gặp phải vấn đề tương tự
Paul Taylor

2
Thật không may, @AndrewWillems .textContent.innerText(mặc dù đọc tốt), không hoạt động cho firefox60 của tôi để viết (nó cũng xóa trường đầu vào được nhúng, giống như .innerHTML). Vì vậy, tôi đã phải dùng đến document.getElementById('myLabel').childNodes[0].nodeValue="new label text"(tất nhiên, chỉ số có thể là một cái gì đó khác rồi 0, mà làm là một kludgy ít nhưng làm việc đó cho tôi)
Matija NALIS

8

Sử dụng .innerTextsẽ hoạt động.

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

7

Đây là một cách khác để thay đổi văn bản của nhãn bằng jQuery:

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

Kiểm tra ví dụ JsFiddle


0

Thử đi:

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

1
Liên kết đến một giải pháp được hoan nghênh, nhưng hãy đảm bảo rằng câu trả lời của bạn hữu ích nếu không có nó: thêm ngữ cảnh xung quanh liên kết để những người dùng đồng nghiệp của bạn sẽ biết nó là gì và tại sao nó ở đó, sau đó trích dẫn phần có liên quan nhất của trang bạn ' đang liên kết lại trong trường hợp trang đích không có sẵn. Các câu trả lời ít hơn một liên kết có thể bị xóa.
paper1111

0

Bởi vì tập lệnh sẽ được thực thi đầu tiên .. Khi tập lệnh sẽ được thực thi, tại thời điểm đó các điều khiển sẽ không được tải. Vì vậy, sau khi điều khiển tải, bạn viết một tập lệnh.

Nó sẽ hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.