在原生 input 中,maxlength 只在 type 为 text, search, url, tel, email, password 时生效;
如果需要对 number 类型的输入框进行限制,可以通过

  • max
  • min 属性

image.png

  1. import React, { useState, useEffect } from "react";
  2. // import PropTypes from "prop-types";
  3. import { Input, NumberKeyboard } from "antd-mobile";
  4. Mobile.propTypes = {};
  5. function Mobile() {
  6. const [value, setValue] = useState("");
  7. const [visible, setVisible] = useState(false);
  8. useEffect(() => {
  9. setVisible(true);
  10. }, []);
  11. // 点击输入时
  12. const onInput = (val: string) => {
  13. setValue(v => {
  14. const result = v + val;
  15. if (result.length > 5) {
  16. return result.slice(0, 5)
  17. }
  18. return result;
  19. });
  20. };
  21. // 点击删除按钮
  22. const onDelete = () => {
  23. setValue(v => v.slice(0, v.length - 1));
  24. };
  25. // 关闭键盘
  26. const onClose = () => {
  27. setVisible(false);
  28. };
  29. return (
  30. <div>
  31. {/* 设置 "readonly" 属性,将无法在输入框中输入任何内容
  32. 如果还设置了 "onChange" 事件,该事件不起作用。
  33. 因为 "readonly" 属性会禁用输入框的输入,导致无法触发 "onChange" 事件
  34. */}
  35. <div
  36. onClick={() => {
  37. console.log('readOnly click')
  38. setVisible(true)
  39. }}
  40. >
  41. {/* 添加 readOnly 阻止原生键盘弹出 */}
  42. <Input
  43. placeholder="请输入内容"
  44. value={value}
  45. readOnly
  46. />
  47. </div>
  48. <NumberKeyboard
  49. visible={visible}
  50. onClose={onClose}
  51. onInput={onInput}
  52. onDelete={onDelete}
  53. // title='数字键盘'
  54. customKey="."
  55. confirmText='确定'
  56. />
  57. </div>
  58. );
  59. }
  60. export default Mobile;

纯数字键盘

image.png
PC端点击无效,需要在移动设备上点击

  1. import { Card } from "antd";
  2. import { NumberKeyboard } from "antd-mobile";
  3. function App() {
  4. const [inputValue, setInputValue] = useState('');
  5. // 点击删除按钮
  6. const onDelete = () => {
  7. setInputValue(v => v.slice(0, v.length - 1));
  8. };
  9. // 点击输入时
  10. const onInput = (val: string) => {
  11. setInputValue(v => {
  12. const result = v + val;
  13. if (result.length > 5) {
  14. return result.slice(0, 5);
  15. }
  16. return result;
  17. });
  18. };
  19. return (
  20. <div className="__inner__">
  21. <Card bordered={false}>
  22. <NumberKeyboard
  23. visible
  24. onInput={onInput}
  25. onDelete={onDelete}
  26. customKey="."
  27. showCloseButton={false}
  28. forceRender
  29. getContainer={null}
  30. />
  31. </Card>
  32. </div>
  33. )
  34. }

Input.readonly

添加 readOnly 阻止原生键盘弹出
设置 “readonly” 属性,将无法在输入框中输入任何内容,
�如果还设置了 “onChange” 事件,该事件不起作用。
因为 “readonly” 属性会禁用输入框的输入,导致无法触发 “onChange” 事件

  1. <Input
  2. placeholder="请输入内容"
  3. value={value}
  4. readOnly
  5. />

less

  1. .__inner__ {
  2. .adm-popup,
  3. .adm-popup-body {
  4. position: static;
  5. }
  6. .adm-number-keyboard-main {
  7. margin-right: -8px;
  8. padding: 8px;
  9. }
  10. .adm-number-keyboard-key {
  11. flex: 1 1 30%;
  12. height: 56px;
  13. margin-bottom: 8px;
  14. margin-right: 3.333%;
  15. font-size: 32px;
  16. border-radius: 12px;
  17. border: none;
  18. gap: 8px;
  19. }
  20. }