箇条書きリストを使用して、ページの読み込み時に「UL」でスクロールバーなしで限られた数のアイテムのみを表示し、「詳細」ボタンをクリックすると、スクロールバーで残りのアイテムを表示したい、UL
その目的のために、私は正常に動作する次のコードを使用しています。
<body onload="resetPops();">
<form id="form1" runat="server">
<div class="info2-wrapper">
<div class="info2">
<asp:BulletedList ID="listACB" runat="server" />
<% const Int16 numACB = 2;
if (listACB.Items.Count > numACB)
{
%>
<div class="more">
<% =(listACB.Items.Count - numACB) %>
more</div>
<div class="less">
Collapse</div>
<% } %>
</div>
</div>
</form>
</body>
コードビハインドでは、リストを次のようにバインドします。
protected void Page_Load(object sender, EventArgs e)
{
listACB.DataSource = GetCategoryBoxItems();
listACB.DataBind();
foreach (ListItem item in listACB.Items)
{
item.Attributes.Add("class", "detail bullet");
}
}
private object GetCategoryBoxItems()
{
return new List<String>
{
"abc",
"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam cursus. Morbi ut mi. ",
"pqr",
"xyz",
"Lorem ipsum dolor sit am"
};
}
JS コードは次のようになります。
function resetPops() {
$('.info2, .info2 ul').removeClass('expanded');
$('.more').show();
$('.less').hide();
}
$(document).ready(function () {
$('.info2 .more').click(function () {
resetPops();
$('.info2, .info2 ul').addClass('expanded');
$('.more, .less').toggle();
});
$('.info2 .less').click(function () {
$('.expanded').scrollTop(0);
resetPops();
});
});
このコードは、リスト内のアイテムの数に対して適切に機能していますが、問題は、リスト アイテムが複数の行にまたがる場合、最後のアイテムが表示されないことです (ul の高さが固定されているため)。低解像度で表示してください。この場合、複数の行に入るリスト項目はほとんどなく、最後の項目が表示されないためです。
たとえば、以下に示すように、2 番目の項目が 2 行になり、5 番目のリスト項目が非表示になります。
• abc
• Lorem ipsum dolor sit amet, consectetuer
adipiscing elit. Nam cursus. Morbi ut mi.
• pqr
• xyz
• Lorem ipsum dolor sit am
の行数ではなく、リスト項目の数のみに基づいてこれを処理したため、この問題に直面していUL
ます。では、ボタンがリスト項目の数more
と行数の両方に基づいて表示されるというこのシナリオをどのように処理できますか?UL