私は次のものを持っています:
function pageLoaded() {
$(".panel-dividers").click(function () {
$(this).parent().toggleClass("collapsed");
return false;
});
});
jqueryでポストバックした後、divでクラスを折りたたむにはどうすればよいですか?
私は次のものを持っています:
function pageLoaded() {
$(".panel-dividers").click(function () {
$(this).parent().toggleClass("collapsed");
return false;
});
});
jqueryでポストバックした後、divでクラスを折りたたむにはどうすればよいですか?
jQuery はクライアント側であり、ページを更新する前に DOM で行われた変更を記憶していないため、これを行うことはできません。
ページが更新されると、DOM 全体が再び読み込まれます。
ポストバックに JSON を使用することを検討できます
@Jitendraが提案するように、 DOMストレージを使用する別の方法があります
サーバー側インジケーターを jquery に取り込み、それをテストします。
function pageLoaded() {
var my_server_side_indicator_of_collapsed_state = <INSERT SERVER SIDE STUFF> (eg. <?php echo my_var; ?>)
if( my_server_side_indicator_of_collapsed_state === TRUE ){
$(this).parent().toggleClass("collapsed");
}
$(".panel-dividers").click(function () {
$(this).parent().toggleClass("collapsed");
return false;
});
});
または、AJAX アプローチを使用して、成功のコールバックでインジケーターを返すこともできます。
Cookie を使用するか、トグルをサーバーに保存して、設定として再レンダリングできるようにします。
最も簡単な (そしてユーザーごとの設定に関してほとんど干渉しない) 方法は、Cookie を使用することです。それを使用$.cookie
してクリックコードに追加して設定を保存する(その後、ページの読み込み時にそれらの設定を呼び出し、それに応じて show.hide する)のが良いでしょう-しかし、それには見出しに一意のIDが必要です。 or-nothing の種類の設定。
さらに明確にするために、ページの読み込み時にすべて表示される 3 つの見出しがあり、そのうちの 1 つを非表示にするをクリックすると、Cookie はおそらく非表示に設定されます。[first | second | third] 要素がクリックされたということは何もなかったため、次のページの読み込みではすべての要素が非表示になります。
パネルに ID がなく、ID を作成できないか作成したくない場合は、次のコードを使用して機能させることができます。ただし、1 つの注意点は、パネルの順序が変更されない限り機能することです (ID は、サーバーによって指定された固定 ID ではなく、ロード時に jQuery によって生成されるため)。
$('.panel-divider').each(function(id){
var $this = $(this),
$parent = $this.parent(),
className = 'collapsed',
cookieName = [className,id].join('-');
if ($.cookie(cookieName) === className){
$parent.addClass(className);
}
$this.on('click',function(){
$parent.toggleClass(className);
if ($parent.hasClass(className)){
$.cookie(cookieName, className);
}else{
$.removeCookie(cookieName);
}
});
});
繰り返しますが、ここに実際の例を示します (jsFiddle がロードされたら、グレーの見出しをクリックしてパネルを切り替えます。次に、Runボタンをもう一度押すと、保存された設定がページにリロードされます。泡立て、すすぎ、繰り返し。