Javascript 将输入事件从一个元素传递到另一个元素

Javascript 将输入事件从一个元素传递到另一个元素,javascript,html,forms,Javascript,Html,Forms,我正在尝试克隆输入字段,并将原始输入字段的输入重定向到克隆。我当前的解决方案看起来是这样的,但克隆上什么也没有发生: var original=document.getElementById(“input1”) var clone=original.cloneNode(真) var formatter=new Intl.NumberFormat('en-US'{ 风格:“货币”, 货币:美元 }) clone.id+='-clone' 原始.parentElement.append(克隆) 原

我正在尝试克隆输入字段,并将原始输入字段的输入重定向到克隆。我当前的解决方案看起来是这样的,但克隆上什么也没有发生:

var original=document.getElementById(“input1”)
var clone=original.cloneNode(真)
var formatter=new Intl.NumberFormat('en-US'{
风格:“货币”,
货币:美元
})
clone.id+='-clone'
原始.parentElement.append(克隆)
原始.addEventListener('keydown',函数(事件){
clone.dispatchEvent(新的event.constructor(event.type,event))
event.preventDefault()
event.stopPropagation()
})
原始.addEventListener('keyup',函数(事件){
original.value=formatter.format(clone.value)
})

我不确定这是否是您要找的,但我添加了

clone.value=original.value

并将keypress更改为keyup

var original=document.getElementById(“input1”);
var clone=original.cloneNode(true);
clone.id+='-clone';
original.parentElement.append(克隆);
原始.addEventListener('keyup',函数(事件){
clone.value=original.value;//这就是您要找的吗?
clone.dispatchEvent(新的event.constructor(event.type,event));
event.preventDefault();
event.stopPropagation();
})
#输入1{
背景:橙色;
}
#输入1克隆{
背景:绿色;
}

如果只想重定向输入,可以尝试此操作。此解决方案正在侦听
输入
事件并将其设置为克隆元素

var original=document.getElementById(“input1”)
var clone=original.cloneNode(真)
clone.id+='-clone'
原始.parentElement.append(克隆)
original.addEventListener('input',函数(事件){
clone.value=event.target.value
});

似乎OP需要在用户输入时格式化货币输入,并保留原始数据的副本

因此,我们需要以某种方式隐藏用户实际键入的输入,并显示格式化的输入

用于重定向输入的正确事件是。。。。在
输入上

在格式化输入上显示插入符号是很棘手的,但我会尝试编辑答案来解决这个问题

下面是一个(类)工作示例:

var original=document.getElementById(“input1”);
var clone=original.cloneNode(true);
clone.id+='-clone';
原始.parentElement.parentElement.append(克隆);
var formattedClone=original.cloneNode(true);
formattedClone.id+='-格式化克隆';
original.parentElement.insertBefore(formattedClone,original);
original.addEventListener('input',函数(事件){
常量货币=‘英镑’;
const locale='en GB';
//const formattedValue=event.target.value;
const formatter=new Intl.NumberFormat(区域设置,{style:'currency',currency:currency});
//const raw=formatToRaw(formattedValue,格式化程序);
original.value=event.target.value;
formattedClone.value=formatter.format(event.target.value);
clone.value=event.target.value;
});
#输入1{
位置:绝对位置;
左:0px;
顶部:0px;
不透明度:0;
}
#包装纸{
位置:相对位置;
}

您没有在inputfield中设置值。clone.value=original.value;并从函数中删除event.preventDefault()。您正在从原始输入发送事件,但克隆没有侦听器<代码>clone.addEventListener(“按键”,函数(事件){clone.value+=event.key;})我在评论中看到你的问题目前还不清楚。所以,在你想达到什么目标的问题上多解释一下你自己。请原谅我。我需要原始输入字段中的格式化值和克隆字段中的原始值。在他的示例中,调用
keypress
事件上的
.preventDefault()
会使原始输入为空。是的,您是对的。我调用l
.preventDefault()
,稍后手动将值设置为格式化字符串。没错,但我需要在输入后转换输入值。因此,我不能使用此解决方案。@Jonas如果您想这样做,那么可以在侦听器函数中这样做。你能解释清楚你想做什么吗?我已经修正了这个问题。总之,我有两个输入字段。我需要原始输入字段中的格式化值和克隆字段中的原始值,这可以简单地同步值,但我需要在输入后转换输入值。因此,两个值之间存在差异,我无法使用此解决方案。格式将为货币。该过程如下所示:
const formatter=new Intl.NumberFormat(locale,{style:'currency',currency:currency})original.value=formatter.format(clone.value)
我想我明白了,您需要原始输入字段中的格式化值和克隆字段中的原始值吗?对吧?没错!用户应该有这样的感觉,他输入了一个货币值。我正在研究一个显示插入符号的解决方案,但除此之外,这是一个有效的解决方案