This article shares the specific code of react+antd.3x to implement the ip input box for your reference. The specific content is as follows The manifestation is as follows: js+html /** * zks 2021 10 26 * IP input box, used to create and modify virtual subnets * Usage: See antd-form custom form controls. */ import React from 'react'; import { Input} from 'antd'; import styles from './index.less' class IpInput extends React.Component{ constructor(){ super(); this._refs = { refip_0: React.createRef(), refip_1: React.createRef(), refip_2: React.createRef(), refip_3: React.createRef() }; } handleNumberChange = (e,type) => { // Ensure the minimum value is 0; const number = parseInt(e.target.value || 0, 10); if (isNaN(number)) { return; } let Obj = {} Obj[`${type}`] = number this.triggerChange(Obj); }; triggerChange = changedValue => { const { onChange, value } = this.props; if (onChange) { onChange({ ...value, ...changedValue, }); } }; turnIpPOS = (e,type)=>{ let self = this; //Left arrow jumps to the left, and does nothing if(e.keyCode === 37) { if(type === 0) {} else { self._refs[`refip_${type-1}`].current.focus(); } } //The right arrow, enter key, space bar, and colon all jump to the right, and the right one does nothing if(e.keyCode === 39 || e.keyCode === 13 || e.keyCode === 32 || e.keyCode === 190) { if(type === 3) {} else { self._refs[`refip_${type+1}`].current.focus(); } } } render(){ const { value } = this.props; return ( <Input.Group compact className = {styles.inputGroup}> <Input style={{ width: '24%' }} className = {styles.self_input} ref = {this._refs.refip_0} value = {value.ip_0} maxLength = {3} onChange={(e)=>{this.handleNumberChange(e,'ip_0')}} onKeyUp ={(e)=>this.turnIpPOS(e,0)}/> <span className = {styles.dot} ></span> <Input style={{ width: '24%' }} className = {styles.self_input} ref = {this._refs.refip_1} value = {value.ip_1} maxLength = {3} onChange={(e)=>{this.handleNumberChange(e,'ip_1')}} onKeyUp ={(e)=>this.turnIpPOS(e,1)}/> <span className = {styles.dot}></span> <Input style={{ width: '24%' }} className = {styles.self_input} ref = {this._refs.refip_2} value = {value.ip_2} maxLength = {3} onChange={(e)=>{this.handleNumberChange(e,'ip_2')}} onKeyUp ={(e)=>this.turnIpPOS(e,2)}/> <span className = {styles.dot}></span> <Input style={{ width: '24%' }} className = {styles.self_input} ref = {this._refs.refip_3} value = {value.ip_3} maxLength = {3} onChange={(e)=>{this.handleNumberChange(e,'ip_3')}} onKeyUp ={(e)=>this.turnIpPOS(e,3)}/> </Input.Group> ) } } export default IpInput; CSS .inputGroup { border: 1px solid #d9d9d9; border-radius: 2px; transition: all 0.3s; &:hover { border-color: #45bbff; border-right-width: 1px !important; outline: 0; box-shadow: 0 0 0 2px rgba(29, 165, 255, 0.2); } text-align: center; .dot { width: 3px; height: 3px; border: 1px solid #000; border-radius: 3px; background-color: #000; opacity: 0.5; z-index: 9; position: relative; top: 21px; } } .self_input { border: none; outline: 0px; &:hover { box-shadow: none; } &::selection { box-shadow: none; } &:focus { box-shadow: none; } } How to use import IPInput from '../../public/IpInput'; <FormItem label="Subnet Gateway" {...formItemLayout}> {getFieldDecorator('price', { initialValue: { ip_0: 255, ip_1: 235, ip_2: 255, ip_3: 255 }, rules: [{ validator: this.checkIp }], })(<IPInput />)} </FormItem> The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM. You may also be interested in:
|
<<: HTML web page creation tutorial Use iframe tags carefully
>>: How much data can be stored in a MySQL table?
Because the company asked me to build a WebServic...
1. Cause: The effect after the subbox is set to f...
1. Stop the MySQL service in the command line: ne...
A few days ago, I exchanged some knowledge about ...
I always thought that Docker had no IP address. I...
Table of contents Preface Browser compiled versio...
When is the table used? Nowadays, tables are gene...
Table of contents Image capture through svg CSS p...
Use HTML CSS and JavaScript to implement a simple...
View mysqlbinlog version mysqlbinlog -V [--versio...
I suddenly thought of this method when I was writi...
This section provides an overview of some other i...
The conversion between time, string and timestamp...
Table of contents background Understanding compos...
vuex-persistedstate Core principle: store all vue...