2017-05-26 9 views
0

より大きい私はこのコードと反応使用して入力フィールドを持っている:防ぎ、ユーザー、3つの小数

const InputField = props => (
    <div className="input-row"> 
    <input 
     {...props.input} 
     type={props.type} 
     className="form-control input-box__input" 
     placeholder={props.placeholder} 
     value={props.value} 
     defaultValue={props.defaultValue} 
     defaultChecked={props.defaultChecked} 
     disabled={props.disabled} 
     onChange={props.onChange} 
     checked={props.checked} 
    /> 
    {props.meta.touched && props.meta.error && 
    <span className="error"> 
     {props.intl.formatMessage({ id: props.meta.error }) } 
     </span>} 
    </div> 
); 

私はそれがないようにvalidation以上preventDefaultプロパティを追加したいですユーザーが小数点以下3桁の浮動小数点数を入力するようにします。

ユーザーが次のような番号を入力した場合:1.234は、キーボードを入力しても数字を入力しないようにする必要があります。どのようにこれを実装するための任意のアイデア?

+0

これまでに何を試みましたか?私たちがあなたのコードを書くことを期待しないでください。ヒント:純粋な機能コンポーネントをクラスコンポーネントに変換し、 'onKeyDown'ハンドラメソッドを使用して現在入力されている値を検証します。 –

+0

私のコードを書くことは決してありません。私のプロジェクトではコンテナでステートレスコンポーネントを使用することが必須です。 – user7334203

+0

'input type =" number "を試してみましょう。[step attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number)で入力サイズを制御できます。これは、このHTML要素をサポートしているブラウザーでしかブラウザー・レベルでは機能しません。しかし、なぜあなたは特定の番号からユーザーを防止したいですか?とにかくfloatは32bitに変換されます – getjackx

答えて

1

他の誰かが示唆したように、入力を制限するにはonKeyDownイベントを使用します。すばやく汚れた例:https://jsfiddle.net/bv9d3bwk/2/

const InputField = props => (
    <div className="input-row"> 
    <input 
     {...props.input} 
     type={props.type} 
     className="form-control input-box__input" 
     placeholder={props.placeholder} 
     value={props.value} 
     defaultValue={props.defaultValue} 
     defaultChecked={props.defaultChecked} 
     disabled={props.disabled} 
     onChange={props.onChange} 
     onKeyDown={this.onKeyDown} 
     checked={props.checked} 
    /> 
    {props.meta.touched && props.meta.error && 
    <span className="error"> 
     {props.intl.formatMessage({ id: props.meta.error }) } 
     </span>} 
    </div> 
); 

const onKeyDown = (e) => { 
    const decimal_index = e.target.value.indexOf('.'); 
    if(decimal_index > -1){ 
     var decimals = e.target.value.substring(decimal_index, e.target.value.length+1); 
     if(decimals.length > 4 && e.keyCode !== 8){ 
      e.preventDefault(); 
     } 
     //this.props.onChange(); 
    } 
} 
+0

私は答えとしてそれを受け入れますが、絶対に正しくはありません。ユーザーが10進数以外の数字を入力すると、数字を入力できなくなります。 – user7334203

+1

ああ、小数点の前に任意の数の数字を許可するようにフィドルを更新しました。 https://jsfiddle.net/bv9d3bwk/1/ –

+0

驚くばかり!ありがとう:) – user7334203

関連する問題