我有一个带有"onChange"事件的输入字段,它使用"forEach"方法获取数组的元素,并且效果很好。但我还想在输入字段中添加一个额外的功能 - 避免输入空格。我应该如何附加此附加功能?
我试图使用"onKeyDown"事件来避免空格,但可能它给了我一个错误。下面是输入字段的代码:
主列表.js
<input
type="text"
className="form-control"
value={sprNotDeleted.value}
onKeyDown=
{this.AttributeValidation(sprNotDeleted.value)}
onChange={this.inputChanged.bind(
this,
sprNotDeleted.id
)}
/>
输入已更改((
inputChanged = (index, e) => {
const { sprNotDeleted } = this.state;
sprNotDeleted.forEach(point => {
point.value = point.id === index ? e.target.value : point.value;
});
this.setState({ sprNotDeleted, isEdit: false });
};
属性验证((
AttributeValidation(value) {
this.setState({
sprNotDeleted: value.replace(/s/g, "")
});
}
如果我使用"onKeyDown",这是一个相应的错误: TypeError: sprNotDelete.map 不是函数
,对于onKeyDown,您没有将事件绑定到此事件。
onKeyDown= {this.AttributeValidation.bind( 这 sprNotDeleted.value )}
<input
type="text"
className="form-control"
value={sprNotDeleted.value}
onKeyDown= {this.AttributeValidation.bind(
this,
sprNotDeleted.value
)}
onChange={this.inputChanged.bind(
this,
sprNotDeleted.id
)}
/>
当您访问此范围时,建议使用此 bind((
而不是通过onKeyDown((处理,你可以尝试使用模式正则表达式处理,因为它是一个输入类型的文本,你可以通过模式本身来处理它?
<input
type="text"
pattern="[^s]+"
/>
快乐编码!!
我还没有真正尝试过你的代码,但似乎你在这里有几个问题:
-
在事件处理程序
onKeyDown
,直接调用函数this.AttributeValidation
,而不作为事件处理程序传递。因此,执行该函数很可能不是您想要的。 -
执行
this.AttributeValidation
时,sprNotDeleted
变成一个字符串而不是数组,数组在其原型中没有附加foreach
方法。
这是为了建议:
onChange
处理程序中,请考虑创建一个箭头函数而不是绑定该函数,因为 u 使用箭头函数来定义函数,因此不需要绑定到this
。
您可以在输入上使用键下,对于第一个单词。 对于反应钩子
const handleKeyDown = (e) => {
if (e.key === " " && name.length===0) {
e.preventDefault();
}
};
<!-- begin snippet: js hide: false console: true babel: false -->
<input type="text" name="name" onKeyDown={handleKeyDown}/>
<input type="text" name="name" onKeyDown={handleKeydown}/>
这将首先防止空格,但之后您不能在任何句子中添加空格,因为您可以给出长度条件
我将其用于我的用例,
- 我有一个受控状态
- 希望用户允许键入空格/空格
- 可以验证外部事件的状态,例如单击按钮
<form action=''>
<InputComponent
placeholder="Enter a name"
value={folderName}
onChange={(value) => {
setFolderName(value);
}}
/>;
<ButtonComponent
variant={"primary"}
disabled={folderName.length === 0 || folderName.trim().length === 0}
onClick={handleClick}
>
SAVE
</ButtonComponent>;
</form>