簡體   English   中英

如何創建一個數字字段,其中焦點添加 3 個十進制數字?

[英]How can I create a numeric field where the focus out adds 3 decimal digits?

我有一個文本字段:

  <Grid item xs={12} sm={6}>
      <BzTextField
        fullWidth
        label="dec"
        value={company.dex}
      />
    </Grid>

我想做的是創建一個新組件,這樣我就可以創建一個必須添加 3 個十進制數字的新輸入類型編號(例如 3.3 變為 3.300)。 我對如何實現這樣的事情有疑問。 我應該使用 Hooks 還是有更簡單的方法。

驗證也應該是 onChange 而不是 keyUp。

您可以通過創建受控輸入並使用輸入的 onBlur 功能來完成此操作,該功能將在您完成輸入編輯后執行 onBlur function。 此 function 將更改為數字添加 3 個十進制數字。

function App() {
const [input, setInput] = React.useState("")
const onBlur = () => {
    setInput(parseFloat(input).toFixed(3))
}
return (
<div >
    <body>
        <input
            type="number"
            value={input}
            onChange={e=>setInput(e.target.value)}
            onBlur={onBlur}
        />
    </body>
</div>
);
}

嘗試這個:

const x = 3.3;
const y = x.toFixed(3);
console.log(y);

// result 3.300

解釋:
這里toFixed(n)方法用來擴展值。
其中n是您要擴展數字值的數字。

點擊這里獲取更多信息

這是使用材料的一種方法。 我假設您不希望在焦點離開控件之前格式化文本。 material 中的 onChange 事件在每次按鍵時都會觸發,因此很難單獨使用該事件進行格式化。

import React, { useState } from 'react';
import { TextField } from '@material-ui/core';

const BzTextField = ({ defaultValue = '' }) => {
    const [value, setValue] = useState(defaultValue);

    const handleBlur = (e) => {
        let parsedValue = parseFloat(e.target.value);

        if (parsedValue) {
            setValue(parsedValue.toFixed(3));
        }
    }

    return (
        <TextField
            type="number"
            fullWidth
            label="dec"
            value={value}
            onBlur={handleBlur}/>    
    );
};

export default BzTextField;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM