【问题标题】:How to increment a constant value with a value entered in Input textfield in material- ui如何使用在 material-ui 的输入文本字段中输入的值来增加常量值
【发布时间】:2020-03-29 18:28:52
【问题描述】:

我已经使用 material-ui 的 Input 组件创建了一个字段:

<Input
  placeholder="0.00"
  value={rate}
  onChange={event => {
    this.setState({
      `obj.rate`,
      event.target.value 
    });
  }}
/>

所以,每当我在此字段中输入费率时,

  • 1) 应该自动在末尾附加“.00”(例如:我输入71,应该显示71.00)

  • 2) 如果我输入以点 (.) 开头的值,则应在点之后输入数字,并且最多可以输入 2 位数字。 (例如:我输入 .2 ===> 应该显示 0.20,如果我输入 .34 ====> 0.34)

请帮我解决这个问题。

提前致谢!

【问题讨论】:

    标签: javascript html node.js reactjs material-ui


    【解决方案1】:

    我建议您像计算器一样思考。在字段中,如果您尝试对其进行格式化。不要让您的用户输入点数。将数字与其他字符混合起来很复杂。

    让我们试试面具。请查看此代码框:https://codesandbox.io/s/inspiring-paper-0ybrz

    基本上,我们将定义一个函数来格式化用户在字段中输入或过去的任何内容。

    export function decimalChangeHandler(event) {
      event.target.value = formatDecimal(event.target.value);
    }
    
    export function formatDecimal(value) {
      if (typeof value === "undefined") return;
      value = value.toString();
      value = value.replace(/\D/g, ""); // only numbers
      value = value.replace(/(\d{1})(\d{14})$/, "$1,$2");
      value = value.replace(/(\d{1})(\d{11})$/, "$1,$2"); // for 11 digits
      value = value.replace(/(\d{1})(\d{8})$/, "$1,$2"); // for 8 digits
      value = value.replace(/(\d{1})(\d{5})$/, "$1,$2"); // for 5 digits
      value = value.replace(/(\d{1})(\d{1,2})$/, "$1.$2"); // put 2 digits
      return value; // return the value
    }
    

    现在我们将在字段发生变化时调用这个函数:

    export default function App() {
      const [value, setValue] = useState(null);
      const classes = useStyles();
    
      const handleChangeValue = event => {
        setValue(decimalChangeHandler(event));
      };
    
      return (
        <div className="App">
          <h1>Mask Example</h1>
    
          <form className={classes.root} noValidate autoComplete="off">
            <TextField
              label="Value"
              value={value}
              placeholder="0.00"
              onChange={handleChangeValue}
              InputLabelProps={{
                shrink: true
              }}
            />
          </form>
        </div>
      );
    }
    

    【讨论】:

    • 在第一个数字之后,其他数字在一个点之后。例如:我想输入 234 卢比,所以它应该显示 234.00 卢比,而不是显示 2.34 卢比
    • 这是一个输入掩码行为。特别是如果您想添加 R$。我相信你想在之前添加货币。那是对的吗?如果您的用户输入 234,它将在您的用户键入后立即添加点。返回 2.34。但是,如果您添加零或任何数字,它将显示 23.40,因此会显示 234.00。这是正常行为。
    • 是的,我必须在值之前添加货币。如果这是正常行为,那对我来说很好。 :)。非常感谢!
    • 请添加货币。尝试执行以下操作:返回值!==“”? R$ ${value}:值; `
    • 好的,谢谢 :)
    猜你喜欢
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 2023-04-05
    • 2019-11-07
    • 2021-04-18
    • 2022-01-13
    • 2019-07-22
    • 1970-01-01
    相关资源
    最近更新 更多