我有一个场景,我使用带有 textarea 的自动完成 jquery UI。每次用户从建议中选择一个值时,textarea 都会填充选择,后跟一个分号。
我需要跟踪建议中选定值的 id。我的想法是将它们放在 span 标签的数据属性中,将选定的值包装在其中并填充 textarea。但现在 textarea 正在显示这些 HTML 标签。
关于应该做什么的任何建议?
我有一个场景,我使用带有 textarea 的自动完成 jquery UI。每次用户从建议中选择一个值时,textarea 都会填充选择,后跟一个分号。
我需要跟踪建议中选定值的 id。我的想法是将它们放在 span 标签的数据属性中,将选定的值包装在其中并填充 textarea。但现在 textarea 正在显示这些 HTML 标签。
关于应该做什么的任何建议?
简单地实现这一点并保持您的 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()