0

hashchange を試してみたところ、Internet Explorer ではまったく機能しないことがわかったので、代わりに click() アプローチを試すことにしました。以下では、リンクがクリックされたときに、URL にページが含まれているかどうかを確認し、link_content の html を id がハッシュに等しい div コンテンツに変更することを想定しています。

ページにプリロードされているすべてのリンクに対して機能しますが、link_content div 内の現在のリンクはトリガーされません。なぜこれが機能しないのですか?

$(document).ready(function() {          
    $('a').on("click", function(event){
        if (location.pathname.search("boh.html")){  
            hash=this.hash;
            if(hash=='#more'){
                $('#link_content').html($('#hiddenlist').html());
            }
            else if(hash){
                $('#link_content').html($(hash).html());
            }
        }
    });
});
4

1 に答える 1

4

試す:

$(document).on("click", "a", function (event) {
    // Your function stuff
});

これがメソッドの委任機能ですon。イベントをコンテナー要素にバインドできますが、コールバック関数は、2 番目のパラメーターで指定したセレクターによって指定された要素に対してのみ実行されます。このシナリオのメイン セレクターとして使用documentするのはおそらく最適ではありません (ただし、問題なく動作するはずです)。

$("#page_container").on("click", "a", function () {

メイン セレクターを、このイベントを含む要素にバインドするコンテナー要素に絞り込んでみてください<a>。との間で"body"どちらが優先されるかわかりません。これが私が意味することです:"body"document

<body>
    <div id="main1">
        header stuff, no <a> elements
    </div>

    <div id="main2">
        main content, definitely contains <a> elements
    </div>
</body>

このシナリオで$("#main2").on("click", "a", function () {は、イベントが発生する可能性のある領域を絞り込むため (そして、クリック イベントが発生したときの jQuery による処理を減らすことができれば) 使用します。

on署名は次のとおりです: http://api.jquery.com/on/#on-events-selector-data-handlereventObject

これが機能する理由は、イベントがコンテナーにバインドされているためです。コンテナーは動的ではなく(動的であってはなりません)、常に使用可能です (したがって、イベントは常にバインドされます)。あなたの場合は「クリック」という特定のイベントがコンテナ内の要素からトリガーされると、コンテナがバブルアップし、そこでこのイベントが発生します。イベントは、イベントをトリガーした要素が 2 番目のパラメーター セレクター (提供されている場合) と一致するかどうかを判断し、一致する場合はそのコンテキストでイベントを実行します。

于 2013-02-15T16:58:16.837 に答える