有没有正确的方法来重复使用Id?

时间:2015-05-19 15:50:15

标签: javascript html forms twitter-bootstrap

我在bootstrap's modal内有一个“创建”表单。与Javascript相关的所有form使用id's而非classes。现在我要做的是创建第二个form使用相同的Javascript(基于前面提到的id)。有没有适当的方法来实现这一目标?我知道使用dublicate id是一种非常糟糕的做法。

3 个答案:

答案 0 :(得分:2)

不,没有正确的方法可以复制id的使用。浏览器的行为是一个混合包,无法依赖。

改为使用类或为每个表单创建动态ID。

答案 1 :(得分:1)

如果你坚持在一个页面上使用两个表格'并且在它们之间共享ID,你几乎没有选择让它工作并且相对干净。关于它。不知道你的技术堆栈,我无法给出完全相关的答案。但是你可以做类似下面的事情:

<强> HTML

<div id="myFormDiv"></div>

<强> JAVASCRIPT

 $("#myFormDiv").load(urlToForm);

您自然需要将表单放在单独的html文件中才能使用,因为您无法在一个html文件中可靠地使用ID来处理多个元素。

答案 2 :(得分:1)

不是,不。

当您使用ID时,您在页面上告诉浏览器该ID是唯一可用的。

如果您有两个具有相同ID的表单,则表示您已经破坏了该保证。

导致问题的一个例子是document.getElementById( )。 它会抓住它找到的第一个元素。 如果有两个,它只会让你获得第一个。

另一个问题: 带有ID的表单习惯使用该ID保存到Window(这种行为在每个使用率超过2%的浏览器中都不是100%标准,全球范围内,今天,但它仍然很常见) 。

我在这个领域看到的丑陋的解决方案就像&#34; my-id-1&#34; &#34; my-id-2&#34;等等,然后您可以访问它们:document.getElementById("my-id-" + x);

......真的不是很漂亮......

...或者,当您想要来回切换时,您可以将表单保留在JS中,并将它们附加到页面上。 通过这种方式,他们可以共享ID,只要他们不会同时附加到页面上。

document.querySelector("#my-form") === form1; // true
form1.parentNode.replaceChild(form2, form1);
document.querySelector("#my-form") === form2; // true

同样,这并不能以任何有意义的方式帮助您使用内置表单和输入命名空间,但如果这是一个功能,您将100%忽略(不是一件坏事) ),这将解决这些问题。

或者,你可以转移到类和数据属性(或只是属性),生活会变得更容易......