我有一支手风琴,根据下拉选择进行填充。在每个手风琴行的“细节”部分,我有一个按钮,它只是隐藏整个手风琴并显示一个div(默认情况下是隐藏的)。 div包含与所选行相同的详细信息以及一些其他字段,以允许为该项目提交请求。第一个手风琴行工作正常,但当我点击任何其他行时,没有任何反应。
我假设这是因为每行的按钮名称相同。我可以轻松地将行标识符添加到按钮名称的末尾以区分每个,但我无法弄清楚如何检测在我的jQuery中选择哪个。
页面的工作原理如下:当进行下拉选择时,我将它的值传递给SQL语句。然后我遍历每个数据库行并填充我的手风琴控件。每行都可以展开以显示详细信息部分,其中包含用于显示隐藏div的按钮。单击该按钮时,我使用jQuery将这些值传递给隐藏div中的标签。
<div class="accordion" id="accordion2">
<?php
if (isset($_GET['src'])) {
// SQL stuff here
$group = null;
while ($row = odbc_fetch_array($db)) {
if ($row['Name'] != $group) {
echo "<div class='accordion-heading'>";
echo "<a class='accordion-toggle' data-toggle='collapse'
data-parent='#accordion2' href='#", $row['Number'],"'>
<button id='buttonAccordionToggle'
data-target='#", $row['Number'],"'>", $row['Name'],"</button></a>";
echo "</div>";
echo "<div id='", $row['Number'],"' class='accordion-body collapse'>";
echo "<div class='accordion-inner'>";
echo "<div class='control-group' style='min-height: 50px'>";
echo "<div class='row-fluid show-grid'>";
echo "<div class='span12'>";
echo "<div class='span1'>";
echo "<label>Name:</label>";
echo "</div>";
echo "<div class='span11'>";
echo "<label id='labelAccordionName'>",
$row['UserName'],"</label>";
echo "</div>";
echo "</div>";
echo "<div class='span12'>";
echo "<a id='select' class='btn'>Select</a>";
echo "</div>";
echo "</div>";
echo "</div>";
echo "</div>";
echo "</div>";
$group = $row['Name'];
}
}
}
?>
</div>
<div id="divDetails" style="display: none;">
<label>Name:</label>
<label id="labelName"></label>
<a id="close" class="btn">Close</a>
</div>
<script>
// Hide the accordion and show the hidden div
$('#select').click(function() {
$('#accordion2').hide();
$('#divDetails').show();
// Pass the label value from the accordion row to the hidden div label
$('#labelName').html($('#labelAccordionName').html());
});
// Hide the div and show the accordion again
$('#close').click(function() {
$('#accordion2').show();
$('#divDetails').hide();
});
// Only allows one row to be shown at a time
$('.accordion-toggle').click(function() {
var $acc = $('#accordion2');
$acc.on('show', '.collapse', function() {
$acc.find('.collapse.in').collapse('hide');
});
});
$(document).ready(function(){
// On dropdown change, pass in value to populate accordion/details
$('#dd').change(function() {
var r = $(this).val();
location.href = "test.php?src=" + r;
});
});
</script>
我知道我可以像下面一样在Select按钮中添加一个标识符,但我不知道如何使用jQuery捕获它:
echo "<a id='select", $row['Number'],"' class='btn'>Select</a>";
同样,第一行的确如此应用,但是当我点击任何其他行上的Select按钮时没有任何反应。
答案 0 :(得分:3)
您无法复制元素id
。您已经在元素上有一个btn
类,所以只需将事件处理程序绑定到该元素:
$('a.btn').click(function() {
...
});
要获取相关的label
文字,您必须使用this
(指的是点击的btn
)来遍历DOM。
首先,请确保您没有复制id
元素的label
,更改:
<label id='labelAccordionName'>
到
<label class='labelAccordionName'>
然后,您应该可以使用以下内容(在a.btn
点击处理程序中):
$(this).parent().prev().find('.labelAccordionName').html();