【发布时间】:2017-11-08 16:41:24
【问题描述】:
我正在尝试创建一个货币输入,开始类似于
" $00.00"
然后当您开始输入时,它会先输入美分,然后再输入美元(即首先更新右侧的数字),例如
" $00.50"
一位 reddit 用户发布了这段 JS 代码来帮助我:https://codepen.io/benjaminreid/pen/gRbgxK?editors=0010
const FormattedInput = class extends React.Component {
constructor(props) {
super(props);
this.amountChanged = this.amountChanged.bind(this);
this.state = {
value: 0,
};
}
amountChanged(e) {
this.setState({
value: e.target.value,
});
}
formatValue(value) {
return accounting.formatMoney(parseFloat(value) / 100);
}
render() {
return (
<div>
<label for="formatted">Formatted input</label>
<input
id="formatted"
type="text"
value={this.formatValue(this.state.value)}
/>
<label for="amount">Actual user input (type in here)</label>
<input
id="amount"
type="text"
onChange={this.amountChanged}
value={this.state.value}
/>
</div>
);
}
}
const App = () =>
<div>
<FormattedInput/>
</div>
;
ReactDOM.render(
<App/>,
document.querySelector('#app')
);
效果很好,但是您输入的输入和显示的输入位于两个不同的框中。我想知道是否有办法直接在格式化的货币框中输入?
也许有人有更好的解决方案吗?非常感谢您的帮助。
【问题讨论】:
-
困难,您需要应用格式并将光标移动到更改时的正确位置。此外,保存时,您需要删除格式!您能否设置它的样式,使字段看起来像一个,但实际上是两个?例如。没有边框,视图包含带有背景颜色和边框的边框。
-
这不会导致显示两行文本(您键入的文本和格式化的文本)吗?我觉得很奇怪 react-native 没有简单的方法来处理货币输入。
-
遇到了同样的问题并使用了类似@G0dsquad 建议的黑客攻击。我将
放在 之上,并将 textinput 颜色设置为透明。所以它看起来像单个组件。有一些库可以处理这个问题,但是输入时文本会一直闪烁,所以我最终得到了这个解决方法。
标签: javascript mobile react-native