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版本:

  • ID必须是文档范围内唯一的
  • ID在容器树中是唯一的

  • 但是我们建议不要使用组件:如果您在示例中编写可重用组件,那么如果您将两个或更多组件放入一个文档中,那么您将得到html。因此,如果无法用类名解决问题,可以使用
    id
    来代替
    class

    ,如果动态创建的输入无法解决问题,则可以向id添加一个增量数字!我还建议使用classes:@adammerifield'当然,我正在更新(:嗯……从技术上讲,你可以使用类似于
    $('[id=“TextBox1”]')的东西使重复id工作。
    ,但这是一个非常糟糕的主意。那些否决投票的人请解释,以便其他人可以学习:(@SajithNair,因为ID必须是唯一的,无论如何都不应该重复……有人只是想确保这不是唯一的breached@SajithNair不是真的…我不推荐it@ArunPJohny-那一定有点迂腐。不同的浏览器(和框架)将以不同的方式处理此情况。在某些情况下,它可以大致按预期工作。如前所述,依赖它不是一个好主意。但它可以工作。这将是SO投票模式的一个很好的测试案例…(它可能会变得多么疯狂):)