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?
After installing VMware and creating a new virtua...
Let's take a look at the code first <form ...
Table of contents Use of CURRENT_TIMESTAMP timest...
1. Introduction Whether the creation time of a fi...
Installation Environment Centos Environment Depen...
In MySQL, create a view on two or more base table...
Now most projects have begun to be deployed on Do...
Preface: In some application scenarios, we often ...
This article uses examples to illustrate the diff...
Table of contents Implementing a search engine ba...
Table of contents Docker image download Start mys...
Table of contents background Problem location Fur...
Table of contents Prerequisites RN passes value t...
This article describes how to set the automatic c...
Setting up remote access in mysql5.7 is not like ...