使用材质UI文本字段的react-hook-form限制长度和类型

时间:2020-11-03 23:27:30

标签: reactjs material-ui textfield maxlength react-hook-form

鉴于下面的代码,我无法限制用户可以输入文本字段并控制输入类型的位数。

如果我删除了type: "number",则可以控制输入长度 ,但现在可以输入字母了。

如果我删除了maxLength: 4,则输入长度无法受到控制,但字母不再允许。

如果如下所示设置inputProps={{ maxLength: 4, type: "number" }},则仅强制执行type: "number"输入约束。

该如何解决?

import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import TextField from "@material-ui/core/TextField";

const useStyles = makeStyles((theme) => ({
  root: {
    "& > *": {
      margin: theme.spacing(1),
      width: "25ch"
    }
  }
}));

export default function BasicTextFields() {
  const classes = useStyles();

  return (
    <form className={classes.root} noValidate autoComplete="off">
      <TextField
        id="outlined-basic"
        label="Outlined"
        variant="outlined"
        inputProps={{ maxLength: 4, type: "number" }}
      />
    </form>
  );
}

1 个答案:

答案 0 :(得分:2)

maxlength不适用于数字输入,您需要使用最小值和最大值的组合。

用户仍然可以输入超过最大数量的值,但是验证将显示为错误。如果他们使用微调器,那将是它将达到的最大值。

"columns": [
            { "data": "cpc_id" },
            { "data": "cpc" },
            { "data": "message" },
            { "data": "name" },
            { "data": "active" },
            {
                "mDataProp": function ( data, type, full, meta) {
                    var $table_fulldata=JSON.stringify(data);
                    $return_data='<a class="btn btn-info btn-sm edit-lead-attribute-message" href="#"><i class="fas fa-pencil-alt"></i></a>';
                    $return_data+='<a style="margin-left: 2px;" class="btn btn-danger btn-sm remove-lead-attribute-message" href="#"><i class="fas fa-trash"></i></a>';
                    $return_data+="<input type='hidden' name='cpc_id' class='cpc_id' value='"+(data.cpc_id)+"'>";
                    return $return_data;
                }
            },
        ],
label {
  display: block;
}