[英]prevent default behaviour of a 'hashchange' event
我正在使用jQuery $(window).on('hashchange')
方法隱藏不相關的部分,但URI哈希指向的部分除外。 它工作得很漂亮,返回按鈕和所有功能。 除了似乎無法阻止瀏覽器的默認行為這一事實之外,這是向下滾動到具有匹配id
的部分。
這是我的功能。
var AddHashNav = function (hashmatch, container) {
$(window).on('hashchange', function (e) {
if ( !window.location.hash ) {
// empty hash, show only the default header
change_preview(container, container + ' > header');
return false;
}
// Don't do anything to hash links who's ids don't match
else if ( window.location.hash.match(hashmatch) ) {
change_preview(container, window.location.hash);
return false;
}
});
}
var changePreview = function (container, preview) {
$(container + ' >').addClass('hidden');
$(preview).removeClass('hidden');
}
來電者就是
$(document).ready(function () {
// applay AddHashNav to all sections who's id ends in 'preview'
AddHashNav(/preview?/, '.hash-nav-container');
});
我已經嘗試過兩個e.preventDefault();
並return false;
而且似乎都不起作用。
請注意,我正在嘗試防止hashChange
事件而不是click
事件的行為,在這里看來這是不可能的,但是我敢肯定至少有人設法弄清楚了如何做到這一點。
我通過在AddHashNav
構造函數的第一個調用上運行change_preview()
來解決此AddHashNav
,並因此隱藏了$(document).load()
調用中的部分。
var AddHashNav = function (hashmatch, container) {
// hide all sections except header on load
change_preview()
$(window).on('hashchange', function (e) {
if ( !window.location.hash ) {
// empty hash, show only the default header
change_preview(container, container + ' > header');
return false;
}
// Don't do anything to hash links who's ids don't match
else if ( window.location.hash.match(hashmatch) ) {
change_preview(container, window.location.hash);
return false;
}
});
}
這不是最漂亮的解決方案。 我不確定為什么它能工作(我想是因為這些部分在window對象中沒有位置,因此無法滾動到其中),但是現在它能工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.