1

私は大きな問題を抱えています。

リンクをクリックした後に外部コンテンツをロードする「#box」という名前の div があります。

$("#box a").click(

 function(e)
 { 
 e.preventDefault(); 
 var hash = this.parentNode.hash;
    $("#boxLoaded").load('boxFiles/'+ hash.substring(1) +'.html');
    $("#box").fadeOut(100);  
    $("#boxLoaded").fadeIn(200);     
 });  

ここまでは簡単です:)

誰かが「#boxLoaded」のどこかをクリックすると、ボックスが消えて再びロードされるため、最初は次のようになります。

$("#boxLoaded").click(
    function()
    {  
        $("#boxLoaded").fadeOut(200);
        $("#box").show(); 
 });  

問題は、読み込まれたファイル (#boxLoaded 内) に「box-menu」という名前のメニューがあり、誰かがそれらをクリックすると、上記のコードが実行されます (#BoxLoaded がフェードアウトし、#Box が表示されます)。

私はそれが起こらないようにしたいのですが:

$("#box-menu").click(
    function(e)
    {  
        e.preventDefault() 
 });  

何をすべきか?これらのファイルをロードしていないときは正常に動作します...

4

2 に答える 2

3

ここから切り替えて.live()バブリングを停止する必要があります。event.stopPropagation()

$("#box-menu").live("click", function(e) {
  e.stopPropagation();
});  

または、再バインドしてからロードし、次のように変更することもできます。

$("#boxLoaded").load('boxFiles/'+ hash.substring(1) +'.html');

これに:

$("#boxLoaded").load('boxFiles/'+ hash.substring(1) +'.html', function() {
  $("#box-menu").click(function(e) { e.stopPropagation(); });
});
于 2010-09-13T13:08:10.937 に答える
0

呼び出すe.preventDefault()ことで、リンクがデフォルトのイベントを再開するのを防いでいるだけです。リンクがクリックされた後、含まれている div に#boxLoadedはまだonclick()コマンドがあります。e.preventDefault()tryを使用する代わりにreturn false。この場合と同じことを行い、preventDefault()その後のコマンドも中止する必要があると思います。

-- 私はまだ人々の投稿にコメントすることはできませんが、Nick への返答として、「それはクールです。e.stopPropagation()機能があることに気づきませんでした」

于 2010-09-13T13:18:28.570 に答える