Javascript Html重复ID
我的控件是根据用户输入动态构建的,有Javascript Html重复ID,javascript,jquery,html,Javascript,Jquery,Html,我的控件是根据用户输入动态构建的,有n文本框的ID也是动态的 然而,我没有预见到这个HTML会在同一个HTML页面中的其他地方重用 我现在面临的问题是重复的ID,这导致我的jQuery函数无法正常工作 我知道ID应该是唯一的,但是,我可以通过使用不同ID的最外层来避免这个问题吗 有专家能给我一些好的建议吗 另外,我正在寻找一个有效的解决方案,因为如果我需要更改每个元素的ID,那么在jQuery中需要做大量的工作 请帮忙。谢谢 您绝对不应该有重复的ID。它可能有效*,但在语义上是不正确的,您不
n
文本框的ID也是动态的
然而,我没有预见到这个HTML会在同一个HTML页面中的其他地方重用
我现在面临的问题是重复的ID,这导致我的jQuery函数无法正常工作
我知道ID应该是唯一的,但是,我可以通过使用不同ID的最外层
来避免这个问题吗
有专家能给我一些好的建议吗
另外,我正在寻找一个有效的解决方案,因为如果我需要更改每个元素的ID,那么在jQuery中需要做大量的工作
请帮忙。谢谢
您绝对不应该有重复的ID。它可能有效*,但在语义上是不正确的,您不应该这样做
您应该重新构造jQuery,不管它有多臭。最好的选择是使用一个类,也许可以使用父类的特定id来指定所需的类
另一种不太吸引人但可行的方法是在ID的末尾添加一个数字或其他东西,使其唯一,然后使用jQuery检测任何具有ID特定部分的元素
*
-正如Arun所描述的那样,jQuery将接受选择器,但它是不有利的,因为它是不正确的我建议您使用类
而不是id
。重复的id
不是一个好的做法。不能多次使用相同的id
。改用类
。即使是错误的jQuery中的选择器没有问题
$('#Container1 #TextBox1').val(1)
$('#Container2 #TextBox1').val(2)
演示:
更好的选择是使用属性选择器
$('#Container1 input[id="TextBox1"]').val(1)
$('#Container2 input[id="TextBox1"]').val(2)
演示:我建议使用类而不是id。或者在生成动态id时添加一些后缀 我确实理解“Id”应该是唯一的,但是,对于最外层的 使用不同的“id”,是否有助于解决问题 否。具有非唯一元素ID将不起作用。在任何情况下都不一致(不同的浏览器和框架可能会以不同的方式处理这种情况) 有没有专家能给我一些好的建议 与使用
id
相比,更喜欢使用class
,尤其是对于可能在页面上多次重复使用的任何组件
针对包含元素本身而不是内部组件元素设置ID,并相应地修改jQuery选择器。或者实现组件,使其在使用时采用“namespace”参数/属性,并在每个类名前面加上组件内部的名称空间(这种方法在创建自定义JSP标记时尤其有效)。取决于HTML版本:
但是我们建议不要使用组件:如果您在示例中编写可重用组件,那么如果您将两个或更多组件放入一个文档中,那么您将得到html。因此,如果无法用类名解决问题,可以使用
id
来代替class
,如果动态创建的输入无法解决问题,则可以向id添加一个增量数字!我还建议使用classes:@adammerifield'当然,我正在更新(:嗯……从技术上讲,你可以使用类似于$('[id=“TextBox1”]')的东西使重复id工作。
,但这是一个非常糟糕的主意。那些否决投票的人请解释,以便其他人可以学习:(@SajithNair,因为ID必须是唯一的,无论如何都不应该重复……有人只是想确保这不是唯一的breached@SajithNair不是真的…我不推荐it@ArunPJohny-那一定有点迂腐。不同的浏览器(和框架)将以不同的方式处理此情况。在某些情况下,它可以大致按预期工作。如前所述,依赖它不是一个好主意。但它可以工作。这将是SO投票模式的一个很好的测试案例…(它可能会变得多么疯狂):)