55

次のコードがあります。

$('ul.questions li a').click(function(event) {
    $('.tab').hide();
    $($(this).attr('href')).fadeIn('slow');
    event.preventDefault();
    window.location.hash = $(this).attr('href');
});

これは、クリックしたときに div をフェードインするだけですが、クリックしたときにページの URL ハッシュ タグを変更して、人々がコピーしてブックマークできるようにしたいと考えています。現時点では、ハッシュタグが変更されると、ページが効果的にリロードされます。

ジャンプ効果を防ぐために、ハッシュタグを変更してページをリロードしないことは可能ですか?

4

5 に答える 5

83

これは私のために働く

$('ul.questions li a').click(function(event) {
    event.preventDefault();
    $('.tab').hide();
    window.location.hash = this.hash;
    $($(this).attr('href')).fadeIn('slow');
});

ほぼ同じコードのデモについては、http://jsbin.com/edicuを確認してください。

于 2009-12-21T11:47:33.380 に答える
4

onload イベントをキャッチしてみてください。そして、いくつかのフラグに依存する伝播を停止します。

var changeHash = false;

$('ul.questions li a').click(function(event) {
    var $this = $(this)
    $('.tab').hide();  //you can improve the speed of this selector.
    $($this.attr('href')).fadeIn('slow');
    StopEvent(event);  //notice I've changed this
    changeHash = true;
    window.location.hash = $this.attr('href');
});

$(window).onload(function(event){
    if (changeHash){
        changeHash = false;
        StopEvent(event);
    }
}

function StopEvent(event){
    event.preventDefault();
    event.stopPropagation();
    if ($.browser.msie) {
        event.originalEvent.keyCode = 0;
        event.originalEvent.cancelBubble = true;
        event.originalEvent.returnValue = false;
    }
}

テストしていないため、動作するかどうかはわかりません

于 2009-12-21T09:33:31.793 に答える