我在react应用程序中使用Material-UI。我尝试做的是在设置所需属性时更改文本字段的标签“请填写此字段”。我试着在inputProps中使用setCustomValidity,但是没有任何效果。这个标签有两种类型,一种是当鼠标悬停在文本字段上时显示的工具提示,另一种是当我们提交表单时显示的。
inputProps
setCustomValidity
myss37ts1#
您收到的错误信息不是material-ui,而是浏览器处理错误的信息。由于浏览器根据“required”属性呈现此信息,因此无法更改此信息。您只能通过对表单执行自定义错误处理来更改此信息。
wwwo4jvm2#
下面是我在我的个人项目中使用的代码片段:
<TextField error={this.props.error_val ? true : false } required={this.props.isRequired ? true : false} type={this.props.type} label={this.props.label} variant={this.props.VARIANT} className={classes.root} />
可以使用required和error属性组合来决定是否填充输入。其次,您可以编写一个validate(),它基本上是一个switch语句,您将在其中传递"标签名称"、"值",并将返回值放入<TextField/>组件。片段:
required
error
validate()
switch
<TextField/>
validate = (name, value) => { let error = ""; switch (name) { case "name": error = (!value || value.length == 0) && "Please enter the name"; break; } return error; }
lc8prwob3#
可以将TextField组件的“必需”验证消息替换为自定义验证消息(提交表单时),如下所示:
<TextField onInvalid={() => { document .getElementById("business-email-textfield") .setCustomValidity("Please type a valid email address"); }} required id="business-email-textfield" label="Business Email" name="email" onChange={handleInput} variant="standard" />
当然,在handleInput函数中,您应该处理输入,但是您还应该重置自定义验证消息。
const [formInput, setFormInput] = useReducer( (state, newState) => ({ ...state, ...newState }), { email: "", businessType: "", } ); const handleInput = (evt) => { const name = evt.target.name; const newValue = evt.target.value; setFormInput({ [name]: newValue }); //the line below clears the custom-validatio message document.getElementById(evt.target.id).setCustomValidity(""); };
3条答案
按热度按时间myss37ts1#
您收到的错误信息不是material-ui,而是浏览器处理错误的信息。由于浏览器根据“required”属性呈现此信息,因此无法更改此信息。您只能通过对表单执行自定义错误处理来更改此信息。
wwwo4jvm2#
下面是我在我的个人项目中使用的代码片段:
可以使用
required
和error
属性组合来决定是否填充输入。其次,您可以编写一个
validate()
,它基本上是一个switch
语句,您将在其中传递"标签名称"、"值",并将返回值放入<TextField/>
组件。片段:
lc8prwob3#
可以将TextField组件的“必需”验证消息替换为自定义验证消息(提交表单时),如下所示:
当然,在handleInput函数中,您应该处理输入,但是您还应该重置自定义验证消息。