1

我的代码做了什么:

  • “添加项目”按钮会弹出一个包含表单的弹出窗口 (#addquoteitem)
  • 提交该表单 1. 在表格中创建一个新行,从模板和 2. 创建隐藏输入(不隐藏在 jsfiddle 中),因为我认为这是将数据提交到服务器的最简单方法
  • 然后,“提交报价”按钮通过“隐藏输入”表单将这些行中的每一行单独提交到服务器

直到我完成(我正在做我的第一个大项目),我才意识到,用户不能编辑他们的个人项目!!!

我认为我应该做的:

  • 为弹出一个弹出窗口的每一行添加一个编辑按钮,这将使用 jquery 来更改相应行的值
  • 然后对其进行更改,以便在按下最终的“提交报价”按钮之前不会创建“隐藏输入”。

JSFIDDLE http://jsfiddle.net/SteveRobertson/XHuVS/1/ JSFIDDLE

我的问题:我的方法是正确的方法吗?我只是问,因为我不这么认为,但感觉好像我把自己编码到了一个角落里。我不知道该怎么做。如果不。以可以将它们提交到服务器的方式动态编辑行的正确方法是什么?当我为模板调用这个函数时,我假设我必须添加某种计数器来给每一行一个唯一的 ID,或者可以用另一种方式识别该行吗?

  function template(row, quoteItem) {
    row.find('.item_num').text(quoteItem.number);
    row.find('.item_desc').text(quoteItem.description);
    row.find('.item_price').text(quoteItem.price);
    return row;
  }

尽管我不知道如何准确地执行我的方法所需的大多数方法,但我只要求正确方向的一点。我知道这是一个冗长的问题以及冗长的代码。感谢您抽出宝贵时间阅读本文以及任何建议或意见。谢谢你。

4

1 回答 1

1

我同意您计划的方法,在提交时生成表单数据。这将为您省去更新隐藏字段的麻烦。

隐藏字段:

您当前的代码生成具有相同 ID 的元素testid。您可以删除 ID,因为它们不会用于任何事情。如果确实需要 ID,请确保它们是唯一的。

生成的元素的命名并不表明它们之间有任何关系,我建议使用如下命名方案:

items[0].name
items[0].description
items[0].price
items[1].name
items[1].description
items[1].price
...

您还可以考虑通过AJAX提交表单。在这种情况下,您可以在提交时构造表单数据对象。它可能看起来像:

[ 
  {name: 'Item 1', description: 'first item', price: '123'},
  {name: 'Item 2', description: 'second item', price: '234'},
  ...
]

这是一个问题,展示了如何在服务器端使用 PHP 处理这个问题。


行生成:

您可以为正在生成的行添加一个唯一 ID,但前提是您需要单独处理这些行。使用计数器生成附加到字符串的值将用于生成唯一 ID。


编辑:

该选项的一种解决方案是edit将事件绑定到表上并使用on函数click检查edit链接。

$('#quote').on('click', '.edit-link', function (e) {
  e.preventDefault();
  //$(this) - edit link
  //$(this).closest('tr') - parent table row
  //$(this).closest('tr').find('.item_num') - span containing number of items
  //$(this).closest('tr').find('.item_num').text() - number of items
  ...
});

表行

<tr>
    <td><span class="item_num">1</span></td>
    <td><span class="item_desc">rt</span></td>
    <td><span class="item_price">asd</span></td>
    <td><a href="#" class="edit-link">Edit</a></td>
</tr>

编辑完成后,存储父 (TR) 引用(ID 或对象)以更新值。


这不是一个全面的解决方案,但我希望它能给你一些线索。

于 2013-05-11T12:18:42.587 回答