2017-01-30 47 views
0

私はweblanguagesの経験がほとんどありませんので、これは単純なエラーかもしれません。スクリプトは実行されません

<a href="#div-id">button</a>のような内部リンクを持つウェブページがあります。しかし、応答性の高いブートストラップメニューのため、スクロールがオーバーシュートすることがあります。問題はまったく同じ前の質問で説明されており、私は受け入れソリューションを実装しようとした:

How can I use HTML ID links with the Bootstrap navbar-header?

しかし、示唆された機能が実行されることはありません。私はそれを次のように実装しました。テストの愚かな方法として、私は2つの警告文(無関係の関数のためのもの)を含んでいます。最初の警告文は正しく実行され、2番目の警告文は実行されません。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 

<script> 
$(function() {      // on document ready 
    var div = $('#showOrHideDiv'); // cache <div> 
    $('#action').click(function() { // on click on the `<a>` 
     alert('here');    // => PROPERLY EXECUTED 
     div.fadeToggle(1000);  // toggle div visibility over 1 second 
    }); 
    // listen for click events originating from elements with href starting with # 
    $('body').on('click.scroll-adjust', '[href^="#"]', function (e) { 
     alert('here');     // => NEVER EXECUTED 
     var $nav; 

     // make sure navigation hasn't already been prevented 
     if (e && e.isDefaultPrevented()) return 

     // get a reference to the offending navbar 
     $nav = $('div.navbox') 

     // check if the navbar is fixed 
     if ($nav.css('position') !== "fixed") return 

     // listen for when the browser performs the scroll 
     $(window).one('scroll', function() { 
     // scroll the window up by the height of the navbar 
     window.scrollBy(0, -$nav.height()) 
     }); 

    }); 
}); 

</script> 

誰でも私の実装で間違いを指摘できますか?

+0

あなたは決して追加クリックイベント:

は、ここで私は、コードを追加されたコメントで、新しいコードです。 – Jason

+0

私はちょうどこれらのスクリプトをコピー/過去、私は正しく書くことができません。しかしコメント(私ではない)によれば、これは 'href'が'# 'で始まるリンク上のすべてのクリックイベントを選択すべきですか?しかし、私はそれをやっていないと思う。どのように見えるべきかについての提案はありますか? – Scipio

+1

これは ''の関数が呼び出されましたが、 ''の関数は呼び出されていませんが、.on( "click"、 "a [href^= '#']"、function(e){ – Jason

答えて

1

私が気づいていない他の機能が呼び出されていることが判明しました(ヒントのためにJasonに感謝)。これらのスクリプトはスムーズなスクロールを可能にしました。これは私が使用しているテンプレートのタイプの共通の機能なので、ここで私のソリューションを提供すると便利かもしれません。

最後に、私は自分自身を実装しようとしたものに似た既存の関数にいくつかの行を追加することで問題を解決することができました。 ...構文にチェック

$(function() { 
$('a[href*=#]:not([href=#])').click(function() { 
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) { 
    var target = $(this.hash); 

    /* added by me: */ 
    var $x; 
    var $nav; 

    $nav = $('nav#tf-menu') 

    if ($nav.css('position') == "fixed"){ $x=0; } else {$x=$nav.height()+30}; 
    /* end added */ 

    target = target.length ? target : $('[name=' + this.hash.slice(1) +']'); 
    if (target.length) { 
    $('html,body').animate({ 

     scrollTop: target.offset().top - 70 - $x //added the -$x 
    }, 1000); 
    return false; 
    } 
} 
}); 
} 
関連する問題