Vì vậy, chúng tôi có một trang:addEventListener gọi hàm mà không có tôi thậm chí yêu cầu nó để
<span id='container'>
<a href='#' id='first'>First Link</a>
<a href='#' id='second'>Second Link</a>
</span>
Và muốn thêm một số sự kiện nhấp chuột:
first.addEventListener('click', function(){alert('sup!');})
trình như một say mê! Tuy nhiên, khi bạn đặt đối số thứ hai là hàm ngoài:
function message_me(m_text){
alert(m_text)
}
second.addEventListener('click', message_me('shazam'))
Nó gọi hàm ngay lập tức. Làm thế nào tôi có thể ngăn chặn điều này? Rất khó chịu!
Dưới đây là một bản demo trực tiếp: http://jsfiddle.net/ey7pB/1/
Do tham số thứ hai mong đợi một tham chiếu ** chức năng, bạn cần cung cấp một tham chiếu **. Với mã có vấn đề của bạn, bạn ngay lập tức gọi hàm và chuyển kết quả của nó (tức là * undefined *). Hoặc gọi hàm trong một hàm ẩn danh (như ví dụ đầu tiên của bạn) hoặc thay đổi hàm thành ** return ** một hàm (có lẽ không phải là lý tưởng). – Ian
Tại sao điều này không lý tưởng? Dường như chống lại D.R.Y. để copypasta chức năng của tôi trong 4 hoặc addEventListeners mà im thiết lập, không? – LittleBobbyTables
Một tùy chọn khác là lưu trữ thông điệp được yêu cầu dưới dạng thuộc tính trên phần tử, sau đó liên kết hàm như 'second.addEventListener ('click', message_me)' và lấy nó từ thuộc tính thay vì tham số. – nnnnnn