我正在使用bootstrap手风琴。可以展开每一行以显示“详细信息部分”,其中包括一些附加信息和一个应从数据库中删除该行的按钮。使用PHP分配行ID和名称,这似乎导致了我的问题。使用隐藏字段,我可以回显一个名字,但它始终是手风琴中最后一行的名称。
通过使用PHP,我如何检测哪一行被展开并获得该div的名称?
PHP / HTML
<?php
if (isset($_POST['btnDelete'])) {
$idnbr = $_POST['hid'];
echo $idnbr; // No matter which row is selected, always echoes last row's name
}
?>
<div id="div1">
<?php
// SQL and SQL connection stuff
while ($row = odbc_fetch_array($data)) {
?>
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#div1"
href="#<?php echo $row['idnbr']; ?>">Delete</a>
</div>
<div id="<?php echo $row['idnbr']; ?>" name="<?php echo $row['idnbr']; ?>"
class="accordion-body collapse">
<input type="hidden" id="hid" name="hid"
value="<?php echo $row['idnbr']; ?>">
</div>
<!-- Accordion body -->
<div>
<input class="btn" type="submit" name="btnDelete"
id="btnDelete" value="Delete">
</div>
<?php
}
?>
</div>
的 JS
// Hides/shows correct row
$('.accordion-toggle').click(function() {
var $acc = $('#div1');
$acc.on('show', '.collapse', function() {
$acc.find('.collapse.in').collapse('hide');
});
});
$('input#btnDelete').click(function() {
// Get the id of the selected row
var $selrow = $('#div1').find('.collapse.in');
var $attrid = $selrow.attr('name');
if (!confirm("Are you sure you want to Delete?")) {
event.preventDefault();
return;
} else {
$('#hid').val($attrid);
alert($attrid'); // Able to alert the correct row
}
});
在我的jQuery中,在设置隐藏字段的值后,如果我阻止页面发布并检查控制台中的值,则它是正确的。当我让页面发布并检查控制台中的HF值时,它始终是第一行的名称,无论我单击哪一行删除。因此,最后一行的名称被回显,第一行的名称被设置为隐藏字段。
DB
Desc | idnbr
-------------------
Desc 1 | 10
Desc 2 | 20
Desc 3 | 30
因此,使用上面的示例DB,您将在页面上看到3个手风琴行(描述1,描述2,描述3)。如果我扩展了第二行(描述2)并点击了删除,这就是我现在得到的:
Alert: 20
Hidden Field: 10
Echo: 30
我需要做些什么来回应正确的价值,或者我是否完全错了? (在这种情况下为20)
答案 0 :(得分:1)
使输入的名称属性提交唯一,例如
<input class="btn" type="submit" name="btnDelete<?php echo $row['idnbr']; ?>" id="btnDelete" value="Delete">
然后:
if(!empty($_POST))
{
$idnr = str_replace('btnDelete','',array_search('Delete', $_POST));
}