나는'm 제외하는 마이너스 플러스 입력에서,그's 잘못된 것:
handleChange(event) {
const value = event.target.value.replace(/\+|-/ig, '');
this.setState({financialGoal: value});
}
렌더링,입력 코드:
<input style={{width: '150px'}} type="number" value={this.state.financialGoal} onChange={this.handleChange}/>
내가를 모방하려 당신의 코드는이's 는 문제에 대응으로<input type='수'/>
. 에 대한 해결 방법,이를 확인 예이며 너 자신을보십시오:https://codepen.io/zvona/pen/WjpKJX?editors=0010
당신은 그것을 정의해야 정상적으로 입력(type='text')와 패턴에 대한 숫자만 사용:
<input type="text"패턴="[0-9]*"onInput={this.handleChange.bind(이)}value={this.상태입니다.financialGoal}/>
고 다음을 비교하의 유효성을 입력:
const financialGoal=(evt.대상입니다.타당성을 지니고 있습니다.유효)? evt.대상입니다.값이다.상태입니다.financialGoal;
가장 큰 주의에 이러한 접근은 모바일-->어디에 키보드가 아't 에는 숫자이지만 정상적인 알파벳 형식입니다.
를 중지-입력,사용 onKeyPress
아니다항상
.
-사용하여이벤트입니다.preventDefault()
내부onKeyPress
의 정압의 이벤트입니다.
-이후keyPress
처리기를 트리거하기 전에onChange
,당신은 확인 누르면 키(의 이벤트입니다.keyCode
),지 현재의 값을 입력(의 이벤트입니다.대상입니다.값이
)
onKeyPress(event){ const keyCode=event.keyCode||이벤트입니다.는; const 렇=String.현재 시간을 가져온 다음 if..else if(keyCode); if(/+|-/.테스트(렇)) 이벤트입니다.preventDefault(); }
const {Component} = React;
class Input extends Component {
onKeyPress(event) {
const keyCode = event.keyCode || event.which;
const keyValue = String.fromCharCode(keyCode);
if (/\+|-/.test(keyValue))
event.preventDefault();
}
render() {
return (
<input style={{width: '150px'}} type="number" onKeyPress={this.onKeyPress.bind(this)} />
)
}
}
ReactDOM.render(<input /> , document.querySelector('#app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<section id="app"></section>
을 유지하려면 입력type='수'
(아마도하기 위해 모바일 장치 트리거 숫자 키보)당신은 사용해야 한다onInput
대신에onChange
을 캡처 이벤트 변경합니다.
를 사용하여onInput
버그가 수정되었 텍스트를 입력으로 번호를 입력 것을 우회 검증 나는 할당을에서항상
. 면 나는 고정이 이 함수를 호출되는onInput
트리거 모든 인스턴스가 있습니다.
여기's 의 예 I'm 하:
<input
type='number'
id={`player${index}Score`}
className='form-control'
pattern='[0-9]{0,5}'
onInput={(event) => this.enterScore(event, index)}
value={this.props.scoreLabel(this.state.scores[index])}
/>
이 도움이 되었으면 좋겠습니다!
나는 더 나은 솔루션입니다. 사 type='텔'와 함께 패턴 regex 이내에 입력 구성 요소다.
의 볼트와 너트를 어떻게 유선이 여기에 있습니다:
class Input extends React.Component {
state = {message: '3'};
updateNumber = (e) => {
const val = e.target.value;
// If the current value passes the validity test then apply that to state
if (e.target.validity.valid) this.setState({message: e.target.value});
// If the current val is just the negation sign, or it's been provided an empty string,
// then apply that value to state - we still have to validate this input before processing
// it to some other component or data structure, but it frees up our input the way a user
// would expect to interact with this component
else if (val === '' || val === '-') this.setState({message: val});
}
render() {
return (
<input
type='tel'
value={this.state.message}
onChange={this.updateNumber}
pattern="^-?[0-9]\d*\.?\d*$"
/>
);
}
}
ReactDOM.render(<input />, document.getElementById('main'));
나의 예에 이 일을Codepen 여기서
2019 대답을 늦었지만,그것을 희망하는 데 도움이 사람
이오't get null 빈 textfield
-Textfield 값은 항상 0 -할 때 백스페이스,당신은 종료됩니다 0 -이 값은 0 입력을 시작,0 대체될 것입니다 실제 번호
// This will make sure that value never is null when textfield is empty
const minimum = 0;
export default (props) => {
const [count, changeCount] = useState(minimum);
function validate(count) {
return parseInt(count) | minimum
}
function handleChangeCount(count) {
changeCount(validate(count))
}
return (
<Form>
<FormGroup>
<TextInput
type="text"
value={validate(count)}
onChange={handleChangeCount}
/>
</FormGroup>
<ActionGroup>
<Button type="submit">submit form</Button>
</ActionGroup>
</Form>
);
};
을 정의하는 입력을 가진onChange()
방법은 아래와 같이(내 경우,childState 포함 상태로 전달하는 아이 component).
<input
...
value={this.props.childState.volume}
...
onChange={(e) => handleChangeInteger(e, {volume: e.target.value})}
/>
방법 중 하나 내가 사용되었을 설치하는validatorJS(npm 검사-저장
)
나는 그 정의된 기능handleChangeInteger
는 객체에 사용되는 변경 상태에서,이 경우{량:e.대상입니다.value}
. 참고:필요한이나 조건을 허용 입력을 빈,그렇지 않으면 그것은 사용자가 백스페이스(삭제)마지막 정수하는 경우에는 이 필드를 비워 두십시오.
const handleChangeInteger = (e, obj_to_return) => {
if (validator.isInt(e.target.value) || e.target.value == '') {
this.props.childSetState(obj_to_return)
}
}
사용자는 지금은 허용되지 않습 형식 이외의 것 백스페이스,0-9,또는 e(이 번호..)입력 필드에.
내가 참조하는 이 게시물을 만드는 나의 솔루션:https://stackoverflow.com/a/45676912/6169225
어쩌면 그것은 도움이 될 것입니다 누군가를
최근에는 내가 사용하는 이 솔루션을 위해 내 응용 프로그램
나는 확실하지 않는 올바른 솔루션은 그러나 그것을 잘 작동합니다.
this.state = {
inputValue: "",
isInputNotValid: false
}
handleInputValue = (evt) => {
this.validationField(evt, "isInputNotValid", "inputValue");
}
validationField = (evt, isFieldNotValid, fieldValue ) => {
if (evt.target.value && !isNaN(evt.target.value)) {
this.setState({
[isFieldNotValid]: false,
[fieldValue]: evt.target.value,
});
} else {
this.setState({
[isFieldNotValid]: true,
[fieldValue]: "",
});
}
}
<input className={this.state.isInputNotValid ? "error" : null} type="text" onChange="this.handleInputValue" />
기본 아이디어,국가는't 업데이트까지 조건이 아't 참고 값이 비어 있는 것입니다.
Don't 을 사용할 필요가 onKeyPress,아래 etc.,
도를 사용하는 경우 이러한 방법들지 않는't 에서 작업하는 터치 장치