Mengapa JavaScript removeEventListener() saya tidak berfungsi?

Susan Sarandon
Lepaskan: 2024-11-02 14:42:30
asal
591 orang telah melayarinya

Why is my JavaScript removeEventListener() not working?

Javascript removeEventListener tidak berfungsi

Dalam kod ini, pendengar acara ditambahkan pada elemen menggunakan kaedah addEventListener():

area.addEventListener('click',function(event) ...,true);
Salin selepas log masuk
Salin selepas log masuk

Kemudian, dalam fungsi lain, pendengar acara cuba dialih keluar menggunakan kaedah removeEventListener():

area.removeEventListener('click',function(event) ...,true);
Salin selepas log masuk
Salin selepas log masuk

Walau bagaimanapun, pendengar acara tidak dialih keluar. Mengapa ini berlaku?

Masalahnya:
Isunya terletak pada fakta bahawa dua fungsi tanpa nama diluluskan sebagai hujah kepada kaedah addEventListener() dan removeEventListener() ialah dua fungsi berbeza. Apabila pendengar acara ditambah dengan kod berikut:

area.addEventListener('click',function(event) ...,true);
Salin selepas log masuk
Salin selepas log masuk

Waktu jalan mencipta objek fungsi tanpa nama baharu yang unik dan memberikannya kepada pengendali acara klik bagi elemen kawasan.

Apabila pendengar acara dialih keluar dengan kod berikut:

area.removeEventListener('click',function(event) ...,true);
Salin selepas log masuk
Salin selepas log masuk

A berbeza objek fungsi tanpa nama unik yang baharu dicipta dan diberikan kepada pengendali acara klik bagi elemen kawasan. Fungsi pertama tidak dialih keluar, jadi ia terus mengendalikan acara klik.

Penyelesaian:
Untuk mengalih keluar pendengar acara dengan betul, perlu menyediakan kaedah removeEventListener() dengan rujukan kepada objek fungsi yang sama yang dihantar ke kaedah addEventListener(). Untuk melakukan ini, pendengar acara harus ditakrifkan sebagai fungsi bernama, dan kemudian fungsi bernama harus digunakan sebagai hujah untuk kedua-dua kaedah addEventListener() dan removeEventListener(). Contohnya:

function foo(event) {
  app.addSpot(event.clientX,event.clientY);
  app.addFlag = 1;
}
area.addEventListener('click',foo,true);
area.removeEventListener('click',foo,true);
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa JavaScript removeEventListener() saya tidak berfungsi?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!