Javascript 独立于ID复制输入字段的通用函数

Javascript 独立于ID复制输入字段的通用函数,javascript,Javascript,我正在尝试创建一个通用函数,我可以调用该函数将表单字段复制到发票中相应的副本中(比如在要给客户的收据中) 正如下面的例子中那样,我在一个字段一个字段的基础上完成了这项工作,但随后我必须在函数代码中为我要复制的每个新ID写一行新行。我想要的是一个通用函数,它可以跨我创建的所有不同发票类型(每个发票类型都是一个新的html文档)以及我认为必要的任何新字段和ID工作。 如果可能的话,可以使用纯javascript(我开始学习html/css/js的唯一目的是为我的小公司创建一个新的发票系统。我甚至还没

我正在尝试创建一个通用函数,我可以调用该函数将表单字段复制到发票中相应的副本中(比如在要给客户的收据中)

正如下面的例子中那样,我在一个字段一个字段的基础上完成了这项工作,但随后我必须在函数代码中为我要复制的每个新ID写一行新行。我想要的是一个通用函数,它可以跨我创建的所有不同发票类型(每个发票类型都是一个新的html文档)以及我认为必要的任何新字段和ID工作。 如果可能的话,可以使用纯javascript(我开始学习html/css/js的唯一目的是为我的小公司创建一个新的发票系统。我甚至还没有看过jQuery)


原件
1: 2: 三: 4: 5:

重复项
1: 2: 三: 4: 5:


或者使用与其他字符串不同的名称,因此这是一个简单的查找

函数copyOver(){
var formInputs=document.getElementById(“form1”).elements
数组.from(formInputs).forEach(函数(inp){
const related=document.getElementById(“ship_u3;”+inp.id)
如果(相关)related.value=inp.value
});
}
document.querySelector(“按钮”)。addEventListener(“单击”,复制)
计费
第一
最后的
颜色
复制
航运
第一
最后的

您的代码几乎正常工作,您只有一个小错误:

z.value
返回值,但是
z.value.text
根本不存在,因此它是
未定义的

只需删除
.text
,您就对了

此外,使用
oninput
事件而不是
onkeypress
,因为它是为此目的创建的,并且工作得更好(
onkeypress
不会为特殊或修改过的键触发)

函数重复(x){
变量y=x+“复制”;
var z=document.getElementById(x);
document.getElementById(y).value=z.value;
}

原件
1: 2: 三: 4: 5:

重复项
1: 2: 三: 4: 5:


不知何故,它需要知道哪些字段x映射到y,除非在查询第1节时,您可以保证顺序与第2节匹配。或者如果有某种命名模式,我的思路是将ID命名为类似的名称,然后使用var来查找要复制的字段。但我不知道如何实现这一点。类似于:函数{var1=current ID/*i.e.ID=name/var2=var1+'copied'/i.e.ID=namecompied*/var1.value=var2.value}解决方案实际上取决于html中的内容。请参阅我在文章中编辑的代码。它与(this.id)一起工作。y=x+的“复制”也起作用,我放了一个警报来测试它。现在只需要算出y.value=x.value;你发布的第一个选项更适合我。这正是我想做的。我被函数duplicate(x){var z=x+'copied';var b=document.getElementById(x);document.getElementById(z).value=b.value.text;}卡住了。在这种情况下,它为1copiedI返回了“undefined”,我可能会窃取您发布的第一个代码,但在学习过程中,我想知道我的失败原因。我要把问题中的代码更新到我现在的位置。ID不应该只是数字,也不应该以数字开头。HTML规范没有问题,但js确实有问题。很高兴知道。我的代码与您的和@FZs帮助一起工作。我喜欢你的剧本,我会把它保存起来,以防我的剧本出了问题。如果我理解正确的话,主要的区别是当你点击按钮时会立即更新整个表单。我将更多地进行“实时”复制,并将您的备份保存为我心目中的另一个项目。非常感谢。我已经像你之前说的那样试过了,但也不起作用。poorman的调试“alert(z)”为z变量返回[object HTMLInputElement],现在它工作了:)。oninput成功了。使用onkeypress时,它不起作用。现在看到你的编辑:P。很高兴知道我走的是正确的道路。谢谢!加起来:基本上是因为.text不起作用。但是我把自己和onkeypress和alert()混淆了,我用它们来帮助我理解出了什么问题。因为在这种情况下,onkeypress只在我输入第二个字符时注册第一个字符(而且由于警报,我总是只尝试一个字符)。
function duplicate(x) {
    x.originalname.value = x.copiedname.value;
    x.originalphone.value = x.copiedphone.value;
  }
<form>And the fields:
<input type="text" name="originalname" oninput="duplicate(this.form)"/>
<input type="text" name="originalphone" oninput="duplicate(this.form)">

<input type="text" name="copiedname" disabled />
<input type="text" name="copiedphone" disabled />
</form>