2014-09-21 15 views
6

Tôi có một html và javascript rất đơn giản.Tôi có vi phạm một số quy tắc javascript không?

<html> 
<body> 
    <h1>Test function</h1> 
    <p>Hello</p> 
    <script> 
     function goodbye() { 
     document.write ("good bye"); 
     } 
     goodbye(); 
    </script> 
</body> 
</html> 

Kết quả hiển thị chuỗi chào tạm biệt. Tôi đã chuyển hàm tạm biệt sang tệp riêng của mình "goodbye.js" Vì vậy, html đầu tiên của tôi bây giờ trông giống như thế này

<html> 
<body> 
    <h1>Test function</h1> 
    <p>Hello</p> 
    <script src='goodbye.js'> 
     goodbye(); 
    </script> 
</body> 
</html> 

Bây giờ nếu tôi chạy lại html, nó chỉ hiển thị Xin chào. Tôi không trông đợi điều đó. Chuyện gì đã xảy ra ?

+0

khi bạn bao gồm tệp js bên ngoài bằng cách sử dụng thẻ tập lệnh. nội dung của nó phải trống. bạn cần một khối tập lệnh khác để tham khảo hàm tạm biệt –

+0

Ahh, tôi thấy cảm ơn bạn rất nhiều. – tadpole

+0

Có, bạn đã sử dụng 'document.write'. Đó là một quy tắc bất thành văn mà bạn không nên làm điều này. –

Trả lời

13

Đây là những gì W3C specification nói:

Các kịch bản có thể được định nghĩa trong nội dung của phần tử SCRIPT hay trong một tập tin bên ngoài. Nếu thuộc tính src không được thiết lập, tác nhân người dùng phải giải thích nội dung của phần tử đó làm tập lệnh. Nếu src có giá trị URI, tác nhân người dùng phải bỏ qua nội dung của phần tử và truy xuất tập lệnh thông qua URI.

Vì vậy, cách chính xác để gọi goodbye() là thêm một người nữa script thẻ sau khi một trong những đầu tiên với src thuộc tính.

+0

+1 cho thông số – Seiyria

+0

+1 để trích dẫn thông số – Brandon

3

Bạn cần hai thẻ tập lệnh, tôi tin. Cái có src phải để trống vì nội dung của nó được xác định bởisrc và nội tuyến goodbye(); của bạn bị bỏ qua. Tạo thẻ thứ hai mà không cần src cho cuộc gọi được nhúng đến goodbye.

2

Khi bạn thêm src thuộc tính vào <script> trình duyệt thẻ sẽ bỏ qua tất cả nội dung bên dưới. Vì vậy, bạn cần phải bổ sung thêm <script> tag:

<script src='goodbye.js'></script> 
<script> 
    goodbye(); 
</script> 
2

Bạn không nhận được để sử dụng một yếu tố kịch bản để tải về một kịch bản và sử dụng nó như một kịch bản nhúng.

<html> 
<body> 
    <h1>Test function</h1> 
    <p>Hello</p> 
    <script src='goodbye.js'></script> 
    <script> 
     goodbye(); 
    </script> 
</body> 
</html> 

Hoặc bạn có thể thêm lời tạm biệt(); gọi đến cuối goodbye.js.

2

Bạn không thể có src thuộc tính cộng với nội dung văn bản thành phần tử script. Nếu có thuộc tính src, nó sẽ được sử dụng và bỏ qua nội dung văn bản.

<script src='goodbye.js'></script> 
<script>goodbye();</script> 
Các vấn đề liên quan