oninvalid 属性不在 React js 中呈现

oninvalid attribute not rendering in React js

我正在尝试在 React js 代码下的 HTML 元素中添加 oninvalid 属性。 (使用不基于 class 的反应挂钩)

 const openEndedAnswer = answer => {
        return (<>
            <input type="text" className="form-control"
                required="required"
                oninvalid="this.setCustomValidity('Enter User Name Here')"
                oninput="this.setCustomValidity('')"
                maxLength="255"
                id={`answer_${question.id}`}
                name={`answer_${question.id}`}
                onChange={e => updatePostForm(e)}
                pattern=".*[^ ].*"
                title=" No white spaces"
            />
        </>)
    }

但它永远不会在浏览器中呈现。所有其他属性都可以在 F12 源代码视图中看到。

改用 onInvalid:

export default function App() {
  return (
    <form>
      Name:{" "}
      <input
        type="text"
        onInvalid={() => console.log("working!")}
        name="fname"
        required
      />
      <input type="submit" value="Submit" />
    </form>
  );
}

属性名称应 onInvalid 而不是 oninvalidonInput 而不是 oninput。此外,您需要在输入字段上调用 ​​setCustomValidity 函数,如下所示(因为输入字段是事件的目标):

onInvalid={e => e.target.setCustomValidity('Enter User Name Here')}
onInput={e => e.target.setCustomValidity('')}

如果您将 React 与 javascript 一起使用,这应该有效:

onInvalid={e => e.target.setCustomValidity('Your custom message')}
onInput={e => e.target.setCustomValidity('')}

但是如果你使用 React 和 typescript,你还需要添加:

onInvalid={e => (e.target as HTMLInputElement).setCustomValidity('Enter User Name Here')}
onInput={e => (e.target as HTMLInputElement).setCustomValidity('')}