簡體   English   中英

防止“ hashchange”事件的默認行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM