我在bootstrap's modal
内有一个“创建”表单。与Javascript
相关的所有form
使用id's
而非classes
。现在我要做的是创建第二个form
使用相同的Javascript
(基于前面提到的id)。有没有适当的方法来实现这一目标?我知道使用dublicate id是一种非常糟糕的做法。
答案 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%忽略(不是一件坏事) ),这将解决这些问题。
或者,你可以转移到类和数据属性(或只是属性),生活会变得更容易......