2017-01-03 5 views
0

リンクが2つあるdivがあります。リンクをクリックすると、別のdivにJSONデータを追加するAJAX呼び出しが行われます。データが追加されると同時に、私は、リンクをクリックしたばかりのリンクを隠したり削除したりしたいと考えています。jQuery removeは、AJAX呼び出し後の2回目のクリックでのみ機能します。

"panel-close"クラスの3番目のdivがあり、これをクリックすると、直前に追加されたデータでdivが削除され、リンクを含むdivが再び表示されます。すべて元の状態に戻る

問題があるのは、データを含むdivが削除されていることがあります。リンクを含むdivが再び表示されないことがあります。パネルの2回目のクリックで発生することもありますdivを閉じて、JSONデータがリンクをクリックした後に再び追加されないことがあります。

私は私のHTMLの基本的なセットアップです:私はjQueryのnoobのだ

<div class="curation-panel"> 
<div class="curation-contents-list"> 
    <a class="load-article"></a> 
</div> 

<div class="article-container"> 
</div> 
</div> 

<div class="film-panel"> 
<div class="film-contents-list"> 
    <a class="load-project"></a> 
</div> 

<div class="project-container"> 
</div> 
</div> 

<div class="panel-close"> 
</div> 

、私はおそらく完全に間違ったアプローチを取ってきましたが、これは私のjqueryのコードです:

$(function(){ 
    var element = $('.load-article'); 
    var url  = element.data('page') + '.json'; 
    var target = $('.article-container'); 

    $(element).on('click', function(e) { 
    e.preventDefault(); 

    $.get(url, function(data) { 
     $('.curation-contents-list').hide(); 
     $(target).append(data); 
    }); 
     $("body").addClass("load-article-is-open"), 
     $(this).animate({ 
      scrollTop: 0 
     }, 300, "easeInOutExpo") 

    }); 
}), 

$(function(){ 
    var element = $('.load-project'); 
    var url  = element.data('page') + '.json'; 
    var target = $('.project-container'); 

    $('.load-project').on('click', function(e) { 
    e.preventDefault(); 

    $.get(url, function(data) { 
     $('.film-contents-list').hide(); 
     $(target).append(data); 
    }); 
     $("body").addClass("load-project-is-open"), 
     $(this).animate({ 
      scrollTop: 0 
     }, 300, "easeInOutExpo") 
    }); 
}), 

$(".panel-close").click(function() { 
    $("body").removeClass("curation-panel-is-open").removeClass("film-panel-is-open").removeClass("load-article-is-open").removeClass("load-project-is-open"), 
    $(".curation-panel").animate({ 
     scrollTop: 0 
    }, 300, "easeInOutExpo"), 
    $(".film-panel").animate({ 
     scrollTop: 0 
    }, 300, "easeInOutExpo"), 

    $('.curation-contents').show(); 
    $('.film-contents-list').show(); 
    $('.article-container').remove(); 
    $('.project-container').remove(); 
}); 
+0

将来の参照を使用したいと思いますが、 '$(要素)を行う理由はないあなただけの' element.onを行うことができますので、.on'、それは既にjQueryオブジェクトであります'。ちょうどポインタ、あなたの問題を解決するつもりはない。 – epascarello

+0

ポインタをありがとう、それは正当に指摘されている –

答えて

1

あなたが

var target = $('.article-container'); 

にAjax呼び出しの結果を追加するよりも、要素を参照し、ここでの問題をt彼は実際に要素を削除しています

$('.article-container').remove(); 
$('.project-container').remove(); 

これらを削除した後、それらを削除すると、そのコードを見つけることができません。

私はあなたがempty()なくremove()

+0

感謝の多くを作る、ありがとう、私は実現している必要があります。私が今抱えている唯一の問題は、ページをロードするときに、データを含むdivを空にし、divを含むリストを表示するために '.panel-close'を2回クリックすることです。その後、正常に動作します。 –

関連する問題