Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以通过编程将标签链接到没有字符串ID的表单输入?_Javascript_Html_Dom - Fatal编程技术网

Javascript 是否可以通过编程将标签链接到没有字符串ID的表单输入?

Javascript 是否可以通过编程将标签链接到没有字符串ID的表单输入?,javascript,html,dom,Javascript,Html,Dom,我经常在网站上创建某种形式的表单,我有a和a,它们应该链接在一起 执行此操作的标准方法是将上的“for”属性设置为与上的“id”属性匹配 这种方法有效,但我讨厌它。我有我的HTMLInputElement实例和HTMLLabelElement实例。我想把它们联系起来。但我必须毫无意义地创建一个随机字符串作为中介。然后,当有人单击元素时,浏览器必须无意义地查找字符串id以查找元素。太不雅观了 有没有办法将HTMLLabelElement与HTMLInputElement直接关联?还是其他更好的方法

我经常在网站上创建某种形式的表单,我有a和a,它们应该链接在一起

执行此操作的标准方法是将上的“for”属性设置为与上的“id”属性匹配

这种方法有效,但我讨厌它。我有我的HTMLInputElement实例和HTMLLabelElement实例。我想把它们联系起来。但我必须毫无意义地创建一个随机字符串作为中介。然后,当有人单击元素时,浏览器必须无意义地查找字符串id以查找元素。太不雅观了

有没有办法将HTMLLabelElement与HTMLInputElement直接关联?还是其他更好的方法


(我知道您可以通过将标签放在中来避免id,但这通常是不可能的,因为页面的样式或各种其他原因)。

如果您的标签和输入总是并排驻留(应该是),那么您可以编写一个方法,在单击标签时为下一个输入提供焦点。 示例代码,您可以根据需要进行修改:

HTML-

<label>something</label>
<input />

您可以通过使用递增计数器作为表单元素的唯一id来避免随机数。 我创建了一个显示每次单击刷新按钮时添加随机数目的表单元素的。每个元素都有自己的标签和输入,都通过生成唯一的递增id链接。所有这些都可以单独引用。单击标签将自动突出显示链接表单输入

为了清楚起见,我对链接ID使用了以下格式:

  var id="_" + counter +"_"+i;
  var labelId = "labelForCity_" + counter +"_"+i;
  var inputId = "city_" + counter +"_"+i;
然后,标签通过以下方式链接到输入:

label.htmlFor = inputId;

每次单击“刷新”按钮(模拟添加到表单中的其他字段的动态数量)时,id中使用的计数器变量都会递增。id显示在输入字段旁边的括号中。

“太不雅观了”-不,发明了一种不同于指定的方式,只是为了满足你的具体要求,那是不雅观的。让标签与输入字段隐式关联的方法是您不想要的,因此必须使用显式方法,即通过id/for。“然后[…]浏览器必须毫无意义地查找字符串id”-这就是它已经进行了大量优化的目的。我认为我的要求不是很具体。大多数网站都是由更小的可重用组件组成的。每当您编写某种可重用的HTML组件时,您都会遇到这样的问题:不知道页面上可能还有什么,以及代码之外可能存在哪些元素ID。好吧,这很公平。但这些论点在指定时可能并不真正适用。。。因此,您必须使用现有的内容。列出了一些创建“唯一ID”的方法,常见框架通常也提供此类功能,例如f.e.jQuery UI,如果答案是“不,没有其他方法”,那么很好,这就是答案,我将继续使用字符串ID。我认为这个问题值得一提,以防还有另一种我不知道的技术。
var a = document.getElementsByTagName('label')[0];
a.addEventListener('click', function(e){
 e.target.nextElementSibling.focus();
});
  var id="_" + counter +"_"+i;
  var labelId = "labelForCity_" + counter +"_"+i;
  var inputId = "city_" + counter +"_"+i;
label.htmlFor = inputId;