inputType={«номер»}, Панель набора номера не отображается в ios, но видна в android — React js

#javascript #ios #reactjs #react-bootstrap

Вопрос:

Я использую элемент управления начальной загрузкой React и группу ввода.

Я создал один компонент и использовал его в других своих модулях.

Код выглядит следующим образом :

 import InputGroup from "react-bootstrap/InputGroup";
import Form from "react-bootstrap/Form"; 

export default class TextInput extends Component {

render() {
    var { value, maxLength, defaultInput, prefix, inputProps, placeholder, label, labelClass, formGroupClass, inputType, error, warning, onChange, disabled, mandatory } = this.props;
    return (
      <div className={styles.container}>
        <Form.Group className={formGroupClass}>
          {label?
            (<Form.Label className={labelClass}>{label}
              {mandatory ? <span className="text-danger"> *</span>
                : ""}
            </Form.Label>)
            : ""
          }
          <InputGroup>
            {prefix amp;amp; prefix !== "" ?
              <InputGroup.Prepend>
                <InputGroup.Text>{prefix}
                </InputGroup.Text>
              </InputGroup.Prepend> : ""}
            <Form.Control isInvalid={!!error} className={warning ? "border border-warning " : undefined}
              disabled={disabled}
              type={inputType}
              placeholder={placeholder}
              value={value}
              defaultValue={defaultInput}
              maxLength={maxLength}
              onChange={(e) => onChange(e.target.value)}
              onKeyPress={(e) => this.onKeyUp(e)}
              {...inputProps}
            />            
          </InputGroup>
          <Form.Text className="feedback-warn text-warning">
            {warning}
          </Form.Text>
          <Form.Control.Feedback type="invalid">
            {error}
          </Form.Control.Feedback>
        </Form.Group>
      </div>
    );
  }
}

}
 

И использовал этот компонент в других моих модулях, подобных этому :

 <TextInput
   placeholder={formData.mobileNum.label}
   inputType={"number"}
   error={formData.mobileNum.errMsg}
   value={formData.mobileNum.value}
   prefix={" 91"}
   maxLength="10"
   onChange={(text) =>
            changeValue(formData.mobileNum.propName, text)
   }
/>
 

Проблема, с которой я сталкиваюсь, заключается в том, что на устройстве Android, когда я нажимаю на поле ввода, цифровая клавиатура работает нормально.

В случае, если устройство ios inputType={"number"} не работает, так как я не могу получить цифровую клавиатуру.

Я попробовал некоторые исправления, но они также влияют на Android. Я хочу, чтобы цифровая клавиатура появлялась на обоих устройствах, когда я пытаюсь ввести поле ввода.

Ответ №1:

 <TextInput
   placeholder={formData.mobileNum.label}
   error={formData.mobileNum.errMsg}
   value={formData.mobileNum.value}
   prefix={" 91"}
   maxLength="10"
keyboardType="numeric" //add this
   onChange={(text) =>
            changeValue(formData.mobileNum.propName, text)
   }
/>
 

добавьте тип клавиатуры в ввод текста и удалите тип inputType

Комментарии:

1. Привет, я не использую React Native, используя React JS, Пожалуйста, обратите внимание -> Когда я говорю об ios и Android, я имею в виду, когда я открываю свой веб-сайт в браузере с помощью устройства ios и Android. keyboardType=»числовой» предназначен для react native. Как реализовать в react js.

2. о, хорошо,хорошо, извините, я не знаю о reactjs

Ответ №2:

Я решил эту проблему. Совершил какую-то глупую ошибку, не заметив {…inputProps}, что он содержит все остальные реквизиты для ввода.

В моем компоненте TextInput просто добавлены методы : pattern и inputMode

 var { pattern, inputMode } = this.props


 <Form.Control isInvalid={!!error} className={warning ? "border border-warning " : undefined}
              disabled={disabled}
              type={inputType}
              placeholder={placeholder}
              value={value}
              pattern={pattern} // add this
              inputMode={inputMode} // add this
              defaultValue={defaultInput}
              maxLength={maxLength}
              onChange={(e) => onChange(e.target.value)}
              onKeyPress={(e) => this.onKeyUp(e)}
              {...inputProps}
            />     

 

Затем в других моих файлах я просто использовал эти реквизиты, как это :

 <TextInput
   ..other props
   pattern={"[0-9]*"}
   inputMode={"numeric"}
   onChange={(text) =>
            changeValue(formData.mobileNum.propName, text)
   }
/>

 

pattern={«[0-9]*»} и inputMode={«числовой»} заставят эти устройства ios использовать панель набора номера. Хотя одной опоры шаблона достаточно, режим ввода-это просто запасной вариант, если шаблон не работает.

Примечание -> Это не повлияет на поведение Android с цифровой клавиатурой.

Альтернатива :

Вместо изменения содержимого в основном компоненте мы можем использовать {…inputProps}

 <TextInput
   ...other props
   inputProps={{ pattern: "[0-9]*", inputMode: "numeric" }} //add this
   onChange={(text) =>
            changeValue(formData.mobileNum.propName, text)
   }
/>