Saya memiliki tautan,, myLink
yang harus memasukkan konten yang dimuat AJAX ke dalam div
(appendedContainer) dari laman HTML saya. Masalahnya adalah bahwa click
acara yang saya ikat dengan jQuery tidak dijalankan pada konten yang baru dimuat yang dimasukkan ke appendedContainer. The click
event terikat pada elemen DOM yang tidak sarat dengan fungsi AJAX saya.
Apa yang harus saya ubah, sehingga acara akan terikat?
HTML saya:
<a class="LoadFromAjax" href="someurl">Load Ajax</a>
<div class="appendedContainer"></div>
JavaScript saya:
$(".LoadFromAjax").on("click", function(event) {
event.preventDefault();
var url = $(this).attr("href"),
appendedContainer = $(".appendedContainer");
$.ajax({
url: url,
type : 'get',
complete : function( qXHR, textStatus ) {
if (textStatus === 'success') {
var data = qXHR.responseText
appendedContainer.hide();
appendedContainer.append(data);
appendedContainer.fadeIn();
}
}
});
});
$(".mylink").on("click", function(event) { alert("new link clicked!");});
Konten yang akan dimuat:
<div>some content</div>
<a class="mylink" href="otherurl">Link</a>
javascript
jquery
html
ajax
jquery-events
confile
sumber
sumber
.
untuk pemilih kelas.Jawaban:
Gunakan delegasi acara untuk elemen yang dibuat secara dinamis:
Ini benar-benar berfungsi, berikut adalah contoh di mana saya menambahkan jangkar dengan kelas
.mylink
alih-alihdata
- http://jsfiddle.net/EFjzG/sumber
Jika konten ditambahkan setelah .on () dipanggil, Anda harus membuat acara yang didelegasikan pada elemen induk dari konten yang dimuat. Ini karena event handler terikat ketika .on () dipanggil (yaitu biasanya saat pemuatan halaman). Jika elemen tidak ada saat .on () dipanggil, acara tidak akan terikat padanya!
Karena peristiwa menyebar melalui DOM, kita dapat menyelesaikannya dengan membuat peristiwa yang didelegasikan pada elemen induk (
.parent-element
dalam contoh di bawah) yang kita tahu ada saat halaman dimuat. Begini caranya:Beberapa bacaan lagi tentang subjek:
sumber
on
kurang rentan terhadap kecocokan yang tidak diinginkan.jika pertanyaan Anda adalah "bagaimana mengikat acara pada konten yang dimuat ajax", Anda dapat melakukan seperti ini:
jadi Anda tidak perlu menempatkan konfigurasi Anda ke setiap kode ajax Anda
sumber
Mulai jQuery 1.7,
.live()
metode ini tidak digunakan lagi. Gunakan.on()
untuk melampirkan penangan acara.Contoh -
sumber
Bagi mereka yang masih mencari solusi, cara terbaik untuk melakukannya adalah dengan mengikat acara pada dokumen itu sendiri dan tidak mengikat dengan acara "siap". Misalnya:
});
sumber
Jika respons ajax Anda berisi input formulir html misalnya, ini akan bagus:
sumber
gunakan jQuery.live () sebagai gantinya. Dokumentasi di sini
misalnya
sumber
.live()
tidak digunakan lagi dan dihapus dalam versi jquery terbaru.Untuk ASP.NET coba ini:
Tampaknya ini berfungsi pada pemuatan halaman dan pemuatan panel pembaruan
Silakan temukan pembahasan lengkapnya di sini .
sumber