免責事項:私はjQueryとjsが初めてです。
jQuery を使用して、ユーザーのプロファイルでレンダリングされたパーシャルの一部を非表示にしようとしています。ユーザー レコードのコレクションをレンダリングします。
<ul class="records">
<%= render @work_records %>
</ul>
部分ファイルでは、次のコードを使用しています。
<li>
<div>
part to be visible
</div>
<div class="container">
<a href="javascript:void(0);" onclick="ShowDetails();">Show details</a>
<script type="text/javascript">
function ShowDetails()
{
$("#work_details_<%= work_record.id %>").slideToggle("fast");
}
</script>
</div>
<div class="profile_details" id="work_details_<%= work_record.id %>" style="display: none;">
part to be hidden
</div></li>
これにより、すべてのユーザー レコードがレンダリングされ、期待どおりにリンクが作成されます。HTMLを分析すると、予想どおりに見えます(IDは一意であり、各部分で一致します)
さて、スライドする唯一のパーシャルは最後のものであるため、どこで問題を探すべきか正確にはわかりません(jsの経験はほとんどありません)。他のパーシャルのリンクをクリックすると、最後の部分がスライドします。何かご意見は?
更新: コードによって生成された HTML は次のとおりです (無関係な部分が取り除かれています)。
<html>
<body>
<div class="container">
<div class="row">
<div class="span6">
<ul class="records">
<li>
<div>
<h1>Partial title</h1>
</div>
<div class="container">
<a href="javascript:void(0);" onclick="ShowDetails();">Show details</a>
<script type="text/javascript">
function ShowDetails()
{
$("#work_details_1").slideToggle("fast");
}
</script>
</div>
<div class="profile_details" id="work_details_1" style="display: none;">
Content of partial that needs to be hidden
</div>
</li>
<li>
<div>
<h1>Partial title</h1>
</div>
<div class="container">
<a href="javascript:void(0);" onclick="ShowDetails();">Show details</a>
<script type="text/javascript">
function ShowDetails()
{
$("#work_details_3").slideToggle("fast");
}
</script>
</div>
<div class="profile_details" id="work_details_3" style="display: none;">
Content of partial that needs to be hidden
</div>
</li>
<li>
<div>
<h1>Partial title</h1>
</div>
<div class="container">
<a href="javascript:void(0);" onclick="ShowDetails();">Show details</a>
<script type="text/javascript">
function ShowDetails()
{
$("#work_details_4").slideToggle("fast");
}
</script>
</div>
<div class="profile_details" id="work_details_4" style="display: none;">
Content of partial that needs to be hidden
</div>
</li>
</ul>
</div>
</body>