如何在按钮上获取扩展手风琴行的Div名称

时间:2013-06-03 15:57:43

标签: php jquery twitter-bootstrap accordion

我正在使用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)

1 个答案:

答案 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));
  }