Tôi biết đây là thực hành xấu. Đừng viết mã như thế này nếu có thể.
Tất nhiên, chúng tôi sẽ luôn thấy mình trong các tình huống trong đó một đoạn mã Javascript thông minh có thể giải quyết vấn đề nhanh chóng.
Tôi đang theo đuổi truy vấn này vì muốn hiểu đầy đủ về những gì xảy ra (và những cạm bẫy tiềm ẩn) khi một cái gì đó như thế này được viết:
<a href="#" onclick="alert('Hi')">Click Me</a>
Theo như tôi có thể nói đây là chức năng giống như
<script type="text/javascript">
$(function(){ // I use jQuery in this example
document.getElementById('click_me').onclick =
function () { alert('Hi'); };
});
</script>
<a href="#" id="click_me">Click Me</a>
Ngoại suy từ điều này có vẻ như chuỗi được gán cho thuộc tính onclickđược chèn trong một hàm ẩn danh được gán cho trình xử lý nhấp chuột của phần tử. Đây thực sự là trường hợp?
Bởi vì tôi đang bắt đầu làm những việc như thế này:
<a href="#" onclick="$(this).next().fadeIn(); return false;">Display my next sibling</a> <!-- Return false in handler so as not to scroll to top of page! -->
Mà hoạt động. Nhưng tôi không biết số tiền này là bao nhiêu. Có vẻ đáng ngờ vì không có chức năng rõ ràng đang được trả lại từ!
Bạn có thể hỏi, tại sao bạn làm điều này, Steve? Inline JS là thực hành xấu!
Thành thật mà nói, tôi mệt mỏi khi chỉnh sửa ba phần mã khác nhau chỉ để sửa đổi một phần của trang, đặc biệt là khi tôi chỉ tạo mẫu một cái gì đó để xem liệu nó có hoạt động không. Thật dễ dàng hơn nhiều và đôi khi còn có ý nghĩa đối với mã liên quan cụ thể đến phần tử HTML này được xác định ngay trong phần tử: Khi tôi quyết định 2 phút sau đó, đây là một ý tưởng tồi tệ, khủng khiếp tôi có thể nuke toàn bộ div (hoặc bất cứ điều gì ) và tôi không có một loạt các hành trình JS và CSS bí ẩn treo xung quanh trong phần còn lại của trang, làm chậm quá trình kết xuất một chút. Điều này tương tự như khái niệm về địa phương của tham chiếu nhưng thay vì nhớ cache, chúng tôi đang xem xét các lỗi và sự phình to mã.
#click_mesự kiện DOM đã có hoặc đặt tập lệnh sau nút.
document.getElementById("click_me").onclick;. Hoặc cảnh báo nó. Bạn sẽ thấy rằng nó là trong một chức năng.