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