【问题标题】:PHP - UPDATE a row in a dynamic HTML tablePHP - 更新动态 HTML 表中的一行
【发布时间】:2018-01-18 01:42:34
【问题描述】:

我有一个用 HTML 创建的动态表:

<table id="rounded-corner" width="51%" border="1" align="center" cellpadding="2" cellspacing="0">
  <tr>
    <th width="19%">Job Type</th>
    <th width="24%">Job Description</th>
    <th width="19%">Type of Piping</th>
    <th width="19%">Scheduled Start Time</th>
    <th width="19%">Scheduled End Time</th>
  </tr>
  <?php do { ?>
    <tr>
      <td nowrap><?php echo $row_selectJobs['JobType']; ?></td>
      <td><?php echo $row_selectJobs['JobDesc']; ?></td>
      <td><?php echo $row_selectJobs['PipeType']; ?></td>
      <td align="center"><?php echo substr($row_selectJobs['TimeStart'],0,-3); ?></td>
      <td align="center"><?php echo substr($row_selectJobs['TimeEnd'],0,-3); ?></td>
    </tr>
  <?php } while ($row_selectJobs = mysql_fetch_assoc($selectJobs)); ?>
</table>

我想知道是否有一种方法可以为每一行添加一个按钮,以便您可以修改该行的内容。请记住,这是一个动态表。我是 PHP 新手,我真的只是从 Dreamweaver 中窃取了这段代码,并根据自己的需要对其进行了修改。

【问题讨论】:

标签: javascript php html ajax html-table


【解决方案1】:

jQuery 很容易做到这一点。在您的 do 循环中,只需添加另一个 TD 并使用 echo 输出类似

<input type='button' class='changeRow' value='Edit' />

对于其他每个 TD,您首先要输出一个跨度内的值,其类名类似于

<span class="labelValue">..What your PHP actually outputs..</span>

然后是隐藏的文本框,或者类似的东西,具体取决于您实际进行编辑的方式。每个都有一个与该行相关的 className。所以

<input type='text' class='editInput' value='' style='display: none;'/> etc...

然后使用 jQuery,您可以将它们链接在一起以使其可编辑

$(document).ready(function(){
$('.changeRow').click(function(){
    var tb = $(this).parents('tr').find('input.editInput');
    var label = $(this).parents('tr').find('span.labelValue');
    if($(this).val() == 'Edit'){
        tb.val(label.html());
        label.hide();
        tb.show();
                    $(this).val('Save');
    }
    else{
        label.html(tb.val());
        tb.hide();
        label.show();
                    $(this).val('Edit');
    }
});
});

所以当你的 HTML 被输出时,它看起来像这样

  <td> <!-- The extra td for your edit button -->
      <input type="button" class="changeRow" value="Edit">Some Job Type</span>
  </td>
  <td nowrap>
      <span class="labelValue">Some Job Type</span>
      <input type="text" class="editInput" value="" style="display: none;" />
  </td>

【讨论】:

  • 实际上,jQuery 并不能很好地工作,因为它会将一行的所有值设置为相同的值。您可以放入一个循环来查找 $(this).parent('tr').find('input.editInput'); 返回的每个控件。然后找到与这些值等相关的跨度。
  • 这里有一个快速但不是很干净的例子来说明如何做到这一点jameshay.co.nz/jsedit.aspx
  • 是的,对不起,我在玩我的服务器。现在已经修好了。
  • 没问题。另外,我会推荐 JEditable,就像您帖子中的 cmets 一样。我只是迷恋我的代码中到底发生了什么:p
  • .closest 代替 .parents
猜你喜欢
  • 2019-03-31
  • 2012-06-18
  • 1970-01-01
  • 2020-09-07
  • 2014-08-18
  • 2021-11-19
  • 1970-01-01
  • 2010-09-26
  • 2022-01-09
相关资源
最近更新 更多