Rumah > hujung hadapan web > tutorial js > Mengapa Pendengar Acara Saya Mencetuskan Fungsi Serta-merta?

Mengapa Pendengar Acara Saya Mencetuskan Fungsi Serta-merta?

Mary-Kate Olsen
Lepaskan: 2024-12-22 14:19:10
asal
449 orang telah melayarinya

Why Are My Event Listeners Triggering Functions Immediately?

Pendengar Acara: Misteri Panggilan Fungsi Tidak Digesa

Apabila bekerja dengan pendengar acara, seseorang mungkin menghadapi tingkah laku yang membingungkan: menambahkan pendengar acara dengan rujukan fungsi luaran nampaknya untuk menggunakan fungsi dengan segera, walaupun tanpa mengklik pada elemen. Ini boleh mengecewakan dan membawa kepada tingkah laku yang tidak dijangka.

Pertimbangkan coretan HTML berikut:

<span>
Salin selepas log masuk

Untuk menambah acara klik, seseorang mungkin menggunakan kaedah addEventListener:

first.addEventListener('click', function() {
  alert('sup!');
})
Salin selepas log masuk

Kod ini berfungsi seperti yang diharapkan, mencetuskan amaran apabila "Pautan Pertama" diklik. Walau bagaimanapun, apabila menggunakan fungsi luaran sebagai hujah kedua:

function message_me(m_text) {
    alert(m_text)
}

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

Fungsi message_me digunakan serta-merta, menghasilkan mesej amaran walaupun sebelum "Pautan Kedua" diklik.

Kepada menyelesaikan isu ini, seseorang perlu memahami bahawa parameter kedua addEventListener menjangkakan rujukan fungsi. Dalam kod bermasalah, fungsi sedang digunakan secara langsung dan hasilnya dihantar ke addEventListener. Sebaliknya, sama ada fungsi tanpa nama harus digunakan sebagai argumen kedua atau fungsi luaran harus diubah suai untuk mengembalikan fungsi.

Sebagai contoh, kita boleh menggunakan fungsi tanpa nama dalam addEventListener:

function message_me(m_text) {
    alert(m_text)
} 

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

Dengan menyediakan rujukan fungsi dalam fungsi tanpa nama, kami memastikan bahawa fungsi message_me hanya digunakan apabila "Pautan Kedua" diklik.

Atas ialah kandungan terperinci Mengapa Pendengar Acara Saya Mencetuskan Fungsi Serta-merta?. 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