Rumah > hujung hadapan web > tutorial js > Mengapa `$(this)` Gagal dalam Pengendali Klik jQuery dengan Fungsi Anak Panah ES6?

Mengapa `$(this)` Gagal dalam Pengendali Klik jQuery dengan Fungsi Anak Panah ES6?

DDD
Lepaskan: 2024-12-15 19:47:14
asal
148 orang telah melayarinya

Why Does `$(this)` Fail in jQuery Click Handlers with ES6 Arrow Functions?

Fungsi Anak Panah ES6 dan jQuery $(this): Kekeliruan Mengikat

Fungsi anak panah ES6 menyediakan kod penjilidan ini secara leksikal dengan menghapuskan keperluan untuk panggilan bind() eksplisit. Walau bagaimanapun, apabila digunakan dengan pengikatan klik jQuery, tingkah laku ini boleh menyebabkan masalah.

Gelagat Tidak Dijangka dengan Fungsi Anak Panah:

Pertimbangkan kod berikut:

class Game {
  foo() {
    this._pads.on('click', function() {
      if (this.go) { $(this).addClass('active'); }
    });
  }
}
Salin selepas log masuk

Dengan menggunakan fungsi anak panah sebaliknya:

class Game {
  foo() {
    this._pads.on('click', () => {
      if (this.go) { $(this).addClass('active'); }
    });
  }
}
Salin selepas log masuk

The Rujukan $(this) ditukar kepada penutupan gaya ES5 (self = this).

Memahami Ikatan Fungsi Anak Panah ES6:

Tingkah laku ini wujud pada anak panah ES6 fungsi, dan bukan masalah dengan terjemahan Traceur. Fungsi anak panah sentiasa mengikat ini secara leksikal dengan konteks yang disertakan. Dalam kes ini, kaedah foo().

Penyelesaian Menggunakan event.currentTarget:

Untuk menyelesaikan isu, gunakan event.currentTarget dan bukannya $(this) untuk akses elemen yang diklik dalam panggilan balik fungsi anak panah:

class Game {
  foo(){
    this._pads.on('click', (event) => {
      if(this.go) {
        $(event.currentTarget).addClass('active');
      }
    });
  }
}
Salin selepas log masuk

jQuery menyediakan secara khusus event.currentTarget untuk menampung situasi di mana fungsi panggil balik mungkin tidak mempunyai akses kepada konteks ini yang betul.

Atas ialah kandungan terperinci Mengapa `$(this)` Gagal dalam Pengendali Klik jQuery dengan Fungsi Anak Panah ES6?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan