Rumah > hujung hadapan web > tutorial js > Mengapakah `addEventListener` Memanggil Fungsi Saya Serta-merta dan bukannya pada Pencetus Peristiwa?

Mengapakah `addEventListener` Memanggil Fungsi Saya Serta-merta dan bukannya pada Pencetus Peristiwa?

Linda Hamilton
Lepaskan: 2024-12-13 15:16:10
asal
593 orang telah melayarinya

Why Does `addEventListener` Call My Function Immediately Instead of on Event Trigger?

"addEventListener Memanggil Fungsi Tanpa Prompt" Diterangkan

Apabila melampirkan pendengar acara pada elemen, kami mahu fungsi itu dilaksanakan hanya apabila peristiwa itu berlaku. Tetapi dalam beberapa kes, mungkin sukar untuk memastikan fungsi itu tidak dipanggil lebih awal.

Pertimbangkan kod HTML berikut:

<span>
Salin selepas log masuk

Kami ingin menambahkan acara klik pada pautan kedua:

second.addEventListener('click', message_me('shazam'));
Salin selepas log masuk

di mana 'message_me' ialah fungsi luaran yang memaparkan mesej. Anehnya, kod ini mencetuskan fungsi 'message_me' serta-merta, walaupun sebelum kami mengklik pautan kedua.

Masalahnya

Isunya terletak pada cara JavaScript mengendalikan rujukan fungsi sebagai hujah kedua 'addEventListener'. JavaScript menjangkakan rujukan kepada fungsi, tetapi dalam kod yang bermasalah, fungsi 'message_me('shazam')' dipanggil serta-merta, dan hasilnya diluluskan sebaliknya.

Penyelesaian

Terdapat dua cara untuk menyelesaikan isu ini:

  • Buat tanpa nama fungsi: Balut 'message_me' dalam fungsi tanpa nama untuk mengembalikan rujukan fungsi:
second.addEventListener('click', function() {
    message_me('shazam');
});
Salin selepas log masuk

Penyelesaian ini memastikan 'message_me' dipanggil hanya apabila pautan kedua diklik.

  • Kembalikan fungsi daripada 'message_me': Ubah suai 'message_me' untuk mengembalikan rujukan fungsi:
function message_me(m_text) {
    return function() {
        alert(m_text);
    };
}

second.addEventListener('click', message_me('shazam'));
Salin selepas log masuk

Dalam kes ini, 'addEventListener' menerima rujukan kepada fungsi yang akan dilaksanakan apabila peristiwa klik berlaku.

Atas ialah kandungan terperinci Mengapakah `addEventListener` Memanggil Fungsi Saya Serta-merta dan bukannya pada Pencetus Peristiwa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan