私はブログサイトを作っています。このページでは、いくつかのブログエントリが必要です。ユーザーが「表示」ボタンを押してパネルを下にスライドさせて、特定のブログエントリを表示できるようにします。その後、ボタンはjQueryを使用して「非表示」と変更されます。次に、ユーザーが「非表示」ボタンをクリックすると、ブログエントリがスライドして再び非表示になります。いくつかのブログエントリは、同時に表示(または非表示)できる必要があります。jQueryのパネル機能の「表示/非表示」ボタンの実装に関する問題?
これは私のコードの抜粋です: stories.html
<div style="width:100%;">
<div class="panel-header" rel="blog-panel1">
<h2>Blog Title #1</h2>
<button type="button">Show</button>
<h4>Date #1</h4>
</div>
<div class="panel" id="blog-panel1" >
<p>Some Paragraph #1</p>
</div>
<div class="panel-header" rel="blog-panel2">
<h2>Blog Title #2</h2>
<button type="button">Show</button>
<h4>Date #2</h4>
</div>
<div class="panel" id="blog-panel2">
<p>Some Paragraph #2</p>
</div>
</div>
main.js .panel
が設定されている私ののmain.cssファイルでは、
$(function() {
$(".panel-header button:contains('Show')").on("click", function() {
//show
$(this).text("Hide");
var panelToShow = $(this).parent().attr('rel');
$('#'+panelToShow).slideDown(300, function() {
$(this).addClass('active');
});
//hide
$(".panel-header button:contains('Hide')").on("click", function() {
$(this).text("Show");
var panelToHide = $(this).parent().attr('rel');
$('#'+panelToHide).slideUp(300, function() {
$(this).removeClass('active');
});
});
});
display: none
.panel.active
はdisplay: block
と設定されています。
私は既に、JavaScriptの隠す部分をコールバックの外に置こうとしました。しかし、それはうまくいかなかった(すなわち、ブログエントリを表示することしかできなかったが、それを隠すことはできなかった)。
これは、ブログエントリを表示したり非表示にしたりできました。その後、奇妙なことをするようになります。 「表示」ボタンをクリックすると、スライドしてすぐにスライドアップします。
どのような助力も大歓迎です!
EDIT解決策が見つかりました。私はまだ上記が間違っているのかどうか、またはスクリプトの外側に隠れた部分を置くのは間違っている(私はJS/jQueryを初めて使っている)人がまだそれを私に説明することができれば、それは素晴らしいだろう。しかし、以下のコードは動作します。私は単純なif/else文を追加しました。
$(".panel-header button").on("click", function() {
if ($(this).text() == "Show") {
$(this).text("Hide");
var panelToShow = $(this).parent().attr('rel');
$('#'+panelToShow).slideDown(300, function() {
$(this).addClass('active');
});
}
else {
$(this).text("Show");
var panelToHide = $(this).parent().attr('rel');
$('#'+panelToHide).slideUp(300, function() {
$(this).removeClass('active');
});
}
});
これは素晴らしいソリューションです!共にありがとう!それはコードをもっと簡単にします。ショー機能の中で非表示機能を使用しても機能しないのはなぜですか?ユーザーがShowボタンをクリックすると、ShowボタンはHideに変わり、Hideボタンのクリックをもう一度聞き取り、Showに戻します。だから、初めてなぜスクリプトがうまく動かないのですか? –