2016-07-08 22 views
8

Trong HTML của tôi, tôi xác định hàm lang trong thẻ script và thêm "Kiểm tra lửa!" nút trong đó có gọi lang trên nhấp chuột:Uncaught TypeError: lang không phải là hàm

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta charset="UTF-8"> 
 
    <title>Testing Functions</title> 
 
    <script type="text/javascript"> 
 
    function lang() { 
 
     alert("Hello, World! It's JavaScript this time"); 
 
    } 
 
    </script> 
 
</head> 
 

 
<body> 
 
    <form action=""> 
 
    <input type="button" value="Test Fire!" onclick="lang();"> 
 
    </form> 
 
</body> 
 

 
</html>

Tuy nhiên, nếu tôi bấm nút Tôi nhận được lỗi này:

Uncaught TypeError: lang is not a function

Nhưng nếu tôi thay đổi tên hàm từ lang để bất cứ điều gì khác mã này hoạt động tốt.

+0

thú vị ... kiểm tra này fiddle: https://jsfiddle.net/h4m1qcoq/ nó gọi chức năng thông qua JS, mà thành công, nhưng không thành công trên nhấp chuột. –

+0

Tôi muốn xem kết quả của điều này vì đó là một vấn đề thú vị. –

+0

Có vẻ như đây là vấn đề với thuộc tính 'onclick'. Nó hoạt động tốt gán onclick ngay cả thông qua JS: 'document.getElementById ('foo'). Onclick = lang'. –

Trả lời

6

xem xét mã này:

<input type="button" value="Test Fire!" onclick="debugger;" />

Khi bạn mở chương trình gỡ rối của bạn, bạn sẽ thấy rằng có vẻ là một tiềm ẩn with phạm vi quấn quanh onclick, làm cho tất cả các <input> ' s tài sản có thể truy cập mà không cần phải tham khảo nút.

Điều này có nghĩa là tất cả các thuộc tính chung (lang là một trong số chúng) và một số thuộc tính khác dành riêng cho các nút được ghi đè. Ví dụ. value, type cũng sẽ không hoạt động.

Đặt cược tốt nhất của bạn là sử dụng cách thức tiêu chuẩn để thêm trình xử lý sự kiện: addEventListener.

<input type="button" value="Test Fire!" /> 
 
<script> 
 
    function lang() { 
 
    alert("Hello, World! It's JavaScript this time"); 
 
    } 
 
    document.querySelector("input").addEventListener("click", lang); 
 
</script>

+0

Vì vậy, tôi giả sử cả Firefox và Chrome đều có phạm vi 'with', trong khi IE thì không? –

+0

@SpencerWieczorek Điều này có vẻ là trường hợp của ba trình duyệt này. Vấn đề này cũng mới đối với tôi. Tôi không chắc đây có phải là tính năng được chỉ định và được ghi chép hay không… Đối với Firefox ít nhất, điều này dường như không liên quan đến chế độ quirks. – Xufox

+0

Bằng cách nào đó IE quản lý để làm cho mã này chạy. Bất kỳ manh mối nào tại sao? – SanyamMishra

2

Không có lý do gì để làm phức tạp (Tôi thật sự không biết tại sao nó không hoạt động), nhưng bạn có thể sử dụng:

  • Thêm cảnh báo trực tiếp trong đầu vào.

Kết quả: https://jsfiddle.net/cmedina/h4m1qcoq/6/

hay

Thêm nghe để đầu vào

function lang() { 
    alert("Hello, World! It's JavaScript this time"); 
} 

document.getElementById('test').onclick = lang 

Kết quả: https://jsfiddle.net/cmedina/h4m1qcoq/7/

+0

Mục đích của tôi ở đây không phải là để tạo ra một cảnh báo. Tôi chỉ minh họa rằng gọi "lang()" không hoạt động. – SanyamMishra

+1

@SanyamMishra sau đó thêm người nghe vào nút tùy chọn thứ hai của tôi! – CMedina

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