2010-02-12 51 views
9

ok im mới tại javascript, nhưng im cố gắng thay đổi innerHTML của một thẻ div, heres kịch bản của tôi và nó không làm việc:javascript thay đổi innerHTML

<head> 
<script type="text/javascript"> 
function var1() { 
document.getElementById('test').innerHTML = 'hi'; 
} 
window.onLoad = var1(); 
</script> 
</head> 
<body> 
<div id="test">change</div> 
</body> 

nó nên làm việc nhưng đối với một số lý do của nó không, bất kỳ Cứu giúp?

+0

Cụm từ "không làm việc" bao gồm một awful nhiều kịch bản. Lỗi chính xác là gì? –

+0

không có lỗi, nó chỉ không thay đổi văn bản bên trong div 'thử nghiệm'. tôi chỉ cố gắng và nếu tôi đặt javascript dưới div, nó hoạt động. là có một cách để làm cho nó hoạt động khi trên div như tôi đã hiển thị? – David

Trả lời

15

Thay vì chỉ định var1 đến window.onload, bạn hiện đang gọi hàm và lưu trữ kết quả của nó. Ngoài ra, điều này có thể hiển nhiên, nhưng var1 có vẻ giống như một tên kỳ lạ cho một hàm. Hãy thử điều này:

function var1() { 
    document.getElementById('text').innerHTML = 'hi'; 
} 

window.onload = var1; 

Lưu ý vỏ của onload, cũng như các dấu ngoặc đơn mất tích sau khi var1.

+1

bạn không nên sử dụng innerHTML nó không phải là tiêu chuẩn và thực hành không tốt. Sử dụng các phương thức DOM an toàn hơn rất nhiều như createElement, createTextNode và appendChild. –

1

Bạn đang nhận được một phần tử có id là "kiểm tra", nhưng không có phần tử nào có id đó trong html của bạn. Có, tuy nhiên, một gọi là "văn bản".

+0

oh xin lỗi, tôi đã khắc phục rằng tôi không sao chép và dán từ văn bản của tôi vừa gõ vào đây, xấu của tôi. nhưng yeh vẫn không hoạt động – David

5

đúng:

window.onload = var1; 

về giá trị ví dụ của bạn của window.onload là undefined vì chức năng var1 trả về không có gì (undefined). Bạn nên đặt thuộc tính onload thành hàm var1, không phải kết quả của hàm gọi var1()

+0

vẫn không hoạt động .. – David

+1

@David: Cũng thông báo thay đổi từ onLoad thành onload. Tôi đã thử nó và nó hoạt động tốt. – Guffa

0

Thử thay đổi onLoad thành onload.

 
function var1() { 
    document.getElementById('test').innerHTML = 'hi'; 
} 
window.onload = var1; // onload 
+0

Sẽ an toàn hơn nhiều khi sử dụng các phương thức DOM như createElement, createTextNode và appendChild. –

+0

Bạn có thể kiểm tra xem điều này sẽ không giải quyết được vấn đề. Bạn thực thi hàm trước khi onload, mà là không mong muốn. Đã cập nhật – brunoais

+0

@brunoais. vấn đề tôi đã cố gắng thu hút sự chú ý đến đó là camelCase on onload. – johnmdonahue

5

sử dụng .innerHTMLnon-standard, và thực hành kinh khủng vì nhiều lý do. bạn nên tạo một phần tử mới bằng cách sử dụng các phương pháp chuẩn thích hợp và thêm nó vào cây nơi bạn muốn nó

+6

Không. Sử dụng 'innerHTML' là cách nhanh nhất. –

+1

không có nghĩa là không phải là thực hành xấu –

+3

Nó không tiêu chuẩn, do đó nó có thể dẫn đến hành vi không xác định, tức là: lỗ hổng bảo mật, do đó là thực hành xấu. Tôi không thể tin ai đó đã bỏ phiếu này ... –

1

Ví dụ của bạn sẽ hoạt động nếu bạn thay đổi chữ hoa "L" thành chữ thường "L" trong "onLoad" và xóa dấu ngoặc đơn sau var1, nơi bạn hiện có window.onLoad = var1();

0

Dưới đây là một phiên bản đơn giản hơn

<body> 
 
<div id="test">change</div> 
 
    <script type="text/javascript"> 
 
    document.getElementById('test').innerHTML = 'hi'; 
 
</script> 
 
</body>

Các vấn đề liên quan