2017-09-29 11 views
0

ASP.NET C#JQueryUI動的に作成されたユーザーコントロールで、accordionのインデックスを保存する方法はありますかASP.NET C#JQueryUIどのように動的に作成されたユーザーコントロールのアコーディオンのインデックスを保存するには?

メインのaspxページからn回(ComboBox内の選択した番号に基づいて)n回ダイナミックに作成されるユーザーコントロール内にJQueryUIアコーディオンがあります。 私はメインのaspxページに一度起こるアコーディオンのインデックスを保存するには、次のJavaScriptコードを使用している、私はかつてアコーディオンコントロールごとにこれを持っている:

var activeAccordion1Item = document.getElementById("<%= HFaccordion1.ClientID %>"); 
var activeAccordion1 = 0; 
if (activeAccordion1Item) { 
    activeAccordion1 = parseInt(activeAccordion1Item.value); 
} 
$("#accordion1").accordion({ 
    collapsible: true, 
    heightStyle: "content", 
    active: activeAccordion1, 
    activate: function (event, ui) { 
     var i = $("#accordion1").accordion("option", "active"); 
     var activeAccordion1Item = document.getElementById("<%= HFaccordion1.ClientID %>"); 
     activeAccordion1Item.value = i; 
    } 
}); 

とのaspxファイル内:

<asp:HiddenField ID="HFaccordion1" runat="server" Value="0" /> 

私はuser_controlの中で何度も起こる可能性のあるこの同じアプローチを使用しましたが、それも機能しますが、保存されたインデックスは常に最初のアコーディオンからのものであり、残りは共有されます。 したがって、accordion1にインデックス2、accordion2にインデックス1があり、コントロールがポストバックを引き起こした場合、ポストバック後に、accordion1とaccordion2の両方がインデックス2をアクティブにして表示されます。

ダイナミックに作成されたアコーディオンに対して、互いに独立して機能するように、上記のコードを変更するにはどうすればよいですか?

答えて

0

$("#accordion1").accordion$(".acc").accordionに変更する必要があります。 .accは、この例のアコーディオンのクラスです。 $("#accordion1")を使用しましたが、これはアクティブなaccordion1で機能しました。

編集

このような各アコーディオンにし、この配列を取得するための際にクリックし、隠しフィールドに格納する配列(HFaccordions)あなたは、配列(accordionsActivate)でアクティブなアコーディオンを保存する必要があります。

<script> 
    var accordionsActivate = []; 
    $(document).ready(function() { 

     var $accordions = $(".acc").accordion({ 
      collapsible: true 
       , active: false 
       , icons: false 

     }).on('click', function() { 
      if ($.inArray($(this).attr('id'), accordionsActivate) < 0) { 
       accordionsActivate.push($(this).attr('id')); 
       $('#<%=this.HFaccordions.ClientID%>').val(accordionsActivate.join()); 
      } 
      else { 
       accordionsActivate.splice($.inArray($(this).attr('id'), accordionsActivate), 1); 
       $('#<%=this.HFaccordions.ClientID%>').val(accordionsActivate.join()); 
      } 

     }); 

     activeAccodions(); // Active accodions after postback 
    }); 

    function activeAccodions() { 
     if ($('#<%=this.HFaccordions.ClientID%>').val() === "") 
      return; 
     activeAccardions = $('#<%=this.HFaccordions.ClientID%>').val().split(','); 
     for (var i = 0; i < activeAccardions.length; i++) { 
      accordionsActivate.push(activeAccardions[i]); 
     } 
     for (var i = 0; i < accordionsActivate.length; i++) { 
      $('#' + accordionsActivate[i]).accordion("option", "active", 0); 
     } 
    } 

</script> 

Online demo (fiddle)

+0

はい私はすべてのアコーディオンにJqueyUIスタイリングがあるようにしました。しかし、私はそれをactivate関数で行うことはできません。したがって、すべてのアコーディオンは1つのアクティブなインデックスを共有します。 – user7792598

+0

@ user7792598私は[jsfiddle](https://jsfiddle.net/ali_soltani/d15qsemj/)を作成しました。これをやりたいですか? –

+0

こんにちはアリ、それは私がしたいことではありません。あなたの例にはポストバックは含まれていません。私は自分のWebサイトで試しましたが、ポストバックの後、すべてのアコーディオンが隠された状態に戻ります。私はポストバックの後にインデックスを覚えておくために、それぞれ異なるアコーディオンが必要です。 – user7792598

関連する問題