У меня есть что-то вроде ниже:
$grabarticles = $db->prepare("
SELECT title, message
FROM articles
");
$grabarticles->execute();
foreach($grabarticles as $articles) {
echo $articles["title"];
//when a user clicks the text above, reveal the below
echo "<div id='article'><br/><br/>";
echo " ".$articles["message"];
echo "</div><br/><br/>";
//when a user clicks the $articles["title"] again, it then collapses
}
Я не слишком хорошо разбираюсь в Javascript, чтобы узнать, но есть ли какие-то вещи, которые я могу сделать, чтобы сделать $articles["title"]
доступными для кликов, а onclick
ниже, чтобы отобразить содержимое $articles["message"]
, но также быть обратимым с другим onclick
? Вот изображение, чтобы проиллюстрировать:
Я хочу, чтобы каждый <div>
был отделен от другого, поэтому, если я открою # 1, щелкнув $article["title"]//1
, а затем откройте # 2, щелкнув соответствующий текст, я могу закрыть # 1, откидываясь назад он не мешает # 2.
Оберните заголовок статьи в элемент DOM, с которым могут быть связаны события, например, span. Затем дайте ему класс, чтобы мы могли легко нацелиться на него.
echo '<span class="article-title">', $articles["title"] ,'</span>';
Далее, ваш id
в цикле foreach
должен быть классом, поскольку вы генерируете несколько элементов, и только один элемент может иметь один идентификатор.
echo "<div class='article' style='display:none;'><br/><br/>"; // <--note the "class" instead of "id"
Теперь просто сделайте функцию щелчка, чтобы Google видимость элемента.
$('.article-title').click(function(){
$(this).next().toggle(); // find the next element after this one and toggle it viibility
});
Использовать jscript
<script type="text/javascript">
$(function () {
$('#testTitle').click(function (e) {
if ($("#testcontent").is(":visible")) {
$("#testcontent").slideUp("slow");
}
else {
$("#testcontent").slideDown("slow");
}
});
});
Вы хотите использовать этот разборчивый плагин DIV jQuery, написанный Джоном Снайдером. Он делает именно то, что вы ищете.
Я использую это в своем блоге, вы можете увидеть его пример здесь и здесь
Пример HTML
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link href="/stylesheet.css" rel="stylesheet" type="text/css">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" src="/js/jquery.collapsible.js"></script>
<div class='collapsible'>
Header Text 1<span></span>
</div>
<div class='container'>
<div class='content'>
<div>
Body Text 1
</div>
</div>
</div>
<div class='collapsible'>
Header Text 2<span></span>
</div>
<div class='container'>
<div class='content'>
<div>
Body Text 2
</div>
</div>
</div>
</html>
CSS, чтобы согласиться с этим
/* START SECTION FOR COLLAPSEIBLE DIV */
.collapse-open {
/* background:#000;
color: #fff;*/
}
.collapse-open span {
display:block;
float:left;
padding:10px;
background:url(/images/minus.png) center center no-repeat;
}
.collapse-close span {
display:block;
float:left;
background:url(/images/plus.png) center center no-repeat;
padding:10px;
}
.active
... Похоже, вы ищете базовый эффект аккордеона.