0

我有一个场景,我使用带有 textarea 的自动完成 jquery UI。每次用户从建议中选择一个值时,textarea 都会填充选择,后跟一个分号。

我需要跟踪建议中选定值的 id。我的想法是将它们放在 span 标签的数据属性中,将选定的值包装在其中并填充 textarea。但现在 textarea 正在显示这些 HTML 标签。

关于应该做什么的任何建议?

4

1 回答 1

0

简单地实现这一点并保持您的 ID 正确的最佳方法(当您需要保持打开状态以便用户可以自由输入时)是在您需要 ID 时而不是之前获取 ID。我的意思是,允许你的用户自动完成和选择,或者手动输入,但是当你对这些数据做一些事情时,你会为列表中的每个项目获取 ID。

<textarea>Item 1; Item 2; Manual Item 3;</textarea>

然后在提交时说(甚至在服务器端),然后拆分列表并根据名称查找每个 ID。这将自动防止用户执行手动修改Item 1或重新排序列表之类的操作:

<textarea>Item 42; Item 2; Manual Item 3;</textarea>

对于上面的示例,因为列表中的每个项目在您需要它之前都会重新询问其 ID,因此Item 42将使用 代替Item 1. 如果您有任何其他形式的 ID 跟踪,无论如何您都必须检查这种可能性,这将导致一大堆额外的代码和工作。

在提交时检查 ID 时,您唯一需要做的额外工作是,如果您希望对尚不存在的项目进行任何特殊处理。但是,很可能无论如何您都需要使用专门跟踪 ID 的系统来执行此操作。

如果您担心优化,您始终可以使用名称作为查找键并将值作为 ID(在用户自动完成时返回)来保留哈希/对象。然后在用户完成时使用此哈希来填写 ID 列表。

/// create your lookup object
lookup = {};

/// store in the lookup
lookup[name] = id;

/// then after a few selections you'll end up with an object like so:
{
  'Item 1': 1,
  'Item 2': 2,
  'Item 42': 42
};

显然,您可能需要考虑名称的大小写可能性,但这可以通过.toLowerCase()

于 2013-02-15T06:00:51.930 回答