将“数据库 id”分配给页面上的多个 html id
Posted
技术标签:
【中文标题】将“数据库 id”分配给页面上的多个 html id【英文标题】:Assigning a "database id" to multiple html ids on a page 【发布时间】:2011-06-28 20:49:58 【问题描述】:我将在引用数据库中表的 id 时使用 model.id,在引用我的 html 中元素的 id 时使用 id。
我有一个 django 项目,我在其中使用一些隐藏的表单字段(所有表单现在对于该隐藏字段都有相同的 id)来容纳 model.id。只要在呈现页面时知道 model.id,这将非常有效。
我现在正在尝试修改流程以在没有给出 model.id 时工作(即有人选择创建我的模型的新实例)。就后端而言,我有这个工作。没有提供 model.id 并且视图知道它应该提供空表单。在这一点上,我选择不创建模型的新实例,因为我只想在用户实际在其中一个表单中输入内容时才这样做。
如果用户在表单中输入内容,那么表单处理会创建一个新的模型实例并将 id 传递回用户浏览器。我试图做的是使用 jquery 表单插件将返回数据保存在隐藏的地方,然后我会查看并使用 val 将所有隐藏字段的 id 设置为返回的 model.id 以便下一个字段用户提交的 /form 将知道写入刚刚创建的模型。
现在看这个,我猜想拥有多个具有相同 ID 的元素的想法很糟糕,但我真的希望它们始终相同,并且只有隐藏字段可以容纳相同的 Model.id页面上的每个表单。
我尝试做如下的事情。然而,页面上只有一个 id 实际获得了分配的值。我应该以不同的方式实现这一目标吗?我应该添加一些东西来使所有出现的 id 都设置为 .val(model.id) 之类的东西吗?如果没有,是否有人对如何解决此问题有任何建议?也许 django 提供了一种更简洁的方式来完成我想要完成的工作?
从表单提交返回的响应。
<response>
<the_model_id_brought_back>3732</the_model_id_brought_back>
...
<response>
jQuery 代码尝试将所有“id_in_multiple_places”id 设置为返回的 model.id。
jQuery('#descriptionForm').ajaxForm(
target: '#response',
success: function(data)
the_model_id = jQuery('#response').find("the_model_id_brought_back").html();
jQuery('#id_in_multiple_places').val(the_model_id);
);
解释为什么我有多个这样的表格。表单由 1 个可见字段组成。页面上有多个表格。当用户离开一个字段(这意味着他们也离开了表单)时,我会将该表单提交给服务器。这将允许他们的数据始终被保存,即使他们中途停止并将他们的计算机扔出窗口。他们可以转到另一台计算机并从上次中断的地方继续。
谢谢。
【问题讨论】:
【参考方案1】:现在看这个我猜想拥有多个具有相同 id 的元素的想法很糟糕
这不仅不好,而且不可能。你不能做这个。您可以通过使用类来解决这个问题,这些类不必是唯一的,但您可能不应该这样做。
您应该做的是为元素分配合理的类名,并为它们的共同祖先分配 ID。您可以从该元素开始向下遍历以按类名查找子元素。
【讨论】:
认为它是并且看起来很糟糕......不知道这是不可能的。谢谢。当您说为他们的共同祖先分配 ID 时,这将如何与每个表单具有的隐藏表单字段一起工作?此字段是必需的,以便后端知道将数据保存到谁。这个来自共同祖先的 id 仍然可以作为隐藏字段的一部分作为表单的一部分传递吗? @wilbbe 你要么必须使用一个共同的祖先,要么通过为一些唯一字符串添加前缀来生成多个唯一 ID,或者使用类来选择元素。 对不起,我没有很快注意到您在这里提到的共同祖先。如果我将 ID 分配给共同祖先并向下遍历以查找子元素,我仍然需要将 id 分配给每个子元素对吗?那么当我可以给每个 html 元素一个唯一的 id 并确保添加一行来设置脚本中的每个 id 时,我是否通过拥有一个共同的祖先而获得了什么?或者也许这就是你所说的,但我不够精通理解你的意思?谢谢。 我建议按类名从一个通用 ID 遍历。以上是关于将“数据库 id”分配给页面上的多个 html id的主要内容,如果未能解决你的问题,请参考以下文章