Saya menggunakan BackboneJS dan Bootstrap, dan saya mencoba mengaktifkan scroll spy pada beberapa konten setelah pengunjung mengklik tombol.
Jadi ketika pengguna mengklik tombol itu, ini akan dijalankan:
$('#frontPageNav').css('display', 'block'); // It was hidden on load
$('#frontPageNav').scrollspy(); // Activate scrollspy, this is where the error happens
$('[data-spy="scroll"]').each(function () {
var $spy = $(this).scrollspy('refresh'); // I think this is not needed because nothing was invisible before
});
$('#frontPageNav li').on('activate', function () { // This never gets emitted
alert('activate!');
});
Dan konten yang ingin saya lihat ditempatkan seperti ini:
<div data-spy="scroll" data-target="#frontPageNav">
<div id="home-top" class="row slide">
</div>
<div id="home-how" class="row slide">
</div>
<div id="home-join" class="row slide">
</div>
</div>
Tidak ada elemen lain di halaman yang memiliki atribut data-spy, jadi menurut saya ini seharusnya satu-satunya konten yang dimata-matai, tetapi ternyata tidak: Saat memuat halaman saya mendapatkan kesalahan, Uncaught TypeError: Cannot read property 'top' of null
, yang berarti plugin scrollspy sedang mencoba menemukan $.position()
dari elemen yang tidak ada. Saya mengaktifkan rem pengecualian di alat pengembang Chrome, dan pengecualian yang tidak tertangkap ada di baris 454 dari bootstrap.js, yaitu && [[$href.position().top, href]]) || null
dan jika saya mengarahkan kursor ke href
, pemilihnya adalah untuk elemen yang tidak saya miliki di markup saya, tetapi Saya memiliki tautan ke hash dengan itu.
Apakah ini berarti plugin scrollspy menganggapnya seharusnya memata-matai semua tautan dengan href="/id#something"
dan menemukan elemen markup dengan ID itu? Mengapa tindakan mata-mata tidak tetap dilakukan pada elemen dengan data-spy="scroll"
?