Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.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-复制字段值而不知道所有字段_Javascript_Html_Events_Dom_Input - Fatal编程技术网

Javascript-复制字段值而不知道所有字段

Javascript-复制字段值而不知道所有字段,javascript,html,events,dom,input,Javascript,Html,Events,Dom,Input,我有一些关联在一起的输入字段,当在“父”字段中输入内容时,需要将值从“父”字段复制到“子”字段。简而言之,它应该是这样工作的 输入内容: 看看会发生什么: var form=document.getElementById('form1'); form.elements.parent1.onblur=函数(){ var form=this.form; form.elements.child1.value=form.elements.parent1.value; }; 简单。现在问题来了:我不知

我有一些关联在一起的输入字段,当在“父”字段中输入内容时,需要将值从“父”字段复制到“子”字段。简而言之,它应该是这样工作的


输入内容:
看看会发生什么:

var form=document.getElementById('form1'); form.elements.parent1.onblur=函数(){ var form=this.form; form.elements.child1.value=form.elements.parent1.value; };
简单。现在问题来了:我不知道表单将有多少字段(这些字段是动态创建的)。我所知道的是,父/子字段的数量总是相同的,它们的名称也是相同的。因此,形式可能如下所示:

<input name="parent[59]"> <input name="child[59]">
<input name="parent[87]"> <input name="child[87]">

……等等。是的,字段名是相同的,只是编号(因为这些名称需要作为数组提交)不同

我如何重写JS代码,这样当用户在
父[59]
中输入某个内容时,其值会复制到
子[59]
,当用户在
父[87]
中输入某个内容时,其值会复制到
子[87]
,等等

当输入字段的名称包含方括号时,我甚至无法使用单个字段


(是的,我尝试用
\
转义括号,但没有成功)

您可以基于属性将所有元素作为目标,然后从名称中获取数字

document.querySelectorAll('[name^=parent]').forEach(函数(elem){
元素addEventListener('input',function(){
var n=this.name.split('[').pop();
document.querySelector('[name=“child['+n+'“]')。value=this.value;
});
});








一个非常简单的解决方案是使用侦听DOM上的所有输入事件,然后如果目标(即)元素具有包含字符串文字“parent”(检查使用)的name属性,则将其替换为“child”(使用),并使用该name属性更新元素

document.addEventListener('input',函数(inputEvent){
if(inputEvent.target.name.indexOf('parent')>-1){
var childName=inputEvent.target.name.replace('parent','child');
document.forms[0]。元素[childName]。值=inputEvent.target.value;
}
});








你的问题的全部内容必须在你的问题中,而不仅仅是链接。链接会腐烂,使问题及其答案在将来对人们毫无用处,人们不必离开网站来帮助你。这就是为什么SO不允许你将JSFIDLE链接作为实际链接发布。下次,请不要忽略此消息。在e问题,理想情况下使用堆栈片段(工具栏按钮)使其可运行。更多:在一位4岁以上的会员身上看到这一点非常令人惊讶,他之前有55个问题,15个答案。天哪,这是我在这里收到的最快的解决方案之一(特别是因为它是一个包含多行代码的解决方案).非常感谢。谢谢,这个解决方案看起来非常优雅。
<input name="parent[59]"> <input name="child[59]">
<input name="parent[87]"> <input name="child[87]">