首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react js上的键盘事件onKeyPress

react js上的键盘事件onKeyPress
EN

Stack Overflow用户
提问于 2020-11-17 11:50:41
回答 1查看 43关注 0票数 0

代码语言:javascript
复制
const CarForm = () => {
    const data = useContext(userContext)
    const [showForm, setShowForm] = useState(false);

    const update = () => {
        db.collection("prospects").doc(data.document).update({
            plates: carData.plates,
            motorNumber: carData.motorNumber,
            serialNumber: carData.serialNumber
        })
        .then(function() {
            console.log(`Document successfully updated!`);
        })
        .catch(function(error) {
            // The document probably doesn't exist.
            console.error("Error updating document: ", error);
        });
    }

    const [plates, setPlates] = useState();
    const [enteredPlates, setEnteredPlates] = useState();
    const [found, setFound] = useState();
    const [carData, setCarData] = useState();

    const getPlates = () => {
        let plates = db.collection('plates');
        plates.onSnapshot((querySnapshot) => {
            const docs = [];
            querySnapshot.forEach((doc) => {
                docs.push({...doc.data(), id: doc.id})
            });
            setPlates(docs);
        });
    }

    useEffect(() => {
        getPlates();
    }, [])

    const findPlates = (e) => {
        e.preventDefault();
        if(plates.find(p => p.plates === enteredPlates)) {
            const x = plates.find(p => p.plates === enteredPlates)
            setCarData({...carData, plates: x.plates, motorNumber: x.motorNumber, serialNumber: x.serialNumber})
            setFound(true)
        } else {
            setCarData({...carData, plates: enteredPlates})
            setFound(false);
        }
        setShowForm(true)
    }
    const handleEvent = (event) => {
        if(event.keyCode === 13) {
            event.preventDefault();
            setEnteredPlates(event.target.value);
            findPlates()
        }
    }

    return ( 
        <>
        {
            plates ? 
            <div className='Container'>
            <form className='data-form'>
                <label htmlFor='placa'>Número de placa</label>
                <div style={style.cont}>
                    <input type='text' name='placa' id='placas' onKeyPress={handleEvent}/>
                    <i className="fa fa-search" onClick={findPlates} style={style.icon}></i>
                </div>
                {showForm === true &&
                  <>
                  {
                    found === true ? 
                    <>
                        <label htmlFor='serie'>Número de serie</label>
                        <input type='text' name='serie' value={carData.serialNumber}/>
                        <label htmlFor='motor'>Número de motor</label>
                        <input type='text' name='motor' value={carData.motorNumber}/>
                    </>
                    :
                    <>
                        <label htmlFor='serie'>Número de serie</label>
                        <input type='text' name='serie' onChange={e=> setCarData({...carData, serialNumber: e.target.value})}/>
                        <label htmlFor='motor'>Número de motor</label>
                        <input type='text' name='motor' onChange={e=> setCarData({...carData, motorNumber: e.target.value})}/>
                    </>
                }
                  </>
                }
            </form>
            {showForm === true &&
              <GeneralButton text='Continuar' route='/datos-personales' back='/planes' click={update}/>
            }
        </div>
        : <Loading />
    }
        </>
     );
}
 
export default CarForm;
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

我的代码有问题。当用户在“输入”type=text中按回车键时,我试图触发一个函数,该函数将输入值设置为一个状态,然后执行一个在对象中搜索输入值的函数。到现在为止,我的代码不能工作,我不知道我做错了什么,有人能帮我吗?非常感谢你的帮助

这是我的函数

代码语言:javascript
复制
const handleEvent = (event) => {
        if(event.keyCode === 13) {
            event.preventDefault();
            setEnteredPlates(event.target.value);
            findPlates()
        }
    }

这是输入

代码语言:javascript
复制
<input type='text' name='placa' id='placas' onKeyPress={handleEvent}/>

这是从处理程序调用的另一个函数:

代码语言:javascript
复制
    const findPlates = (e) => {
        e.preventDefault();
        if(plates.find(p => p.plates === enteredPlates)) {
            const x = plates.find(p => p.plates === enteredPlates)
            setCarData({...carData, plates: x.plates, motorNumber: x.motorNumber, serialNumber: x.serialNumber})
            setFound(true)
        } else {
            setCarData({...carData, plates: enteredPlates})
            setFound(false);
        }
        setShowForm(true)
    }

这是所有的返回部分:

代码语言:javascript
复制
return ( 
        <>
        {
            plates ? 
            <div className='Container'>
            <form className='data-form'>
                <label htmlFor='placa'>Número de placa</label>
                <div style={style.cont}>
                    <input type='text' name='placa' id='placas' onKeyPress={handleEvent}/>
                    <i className="fa fa-search" onClick={findPlates} style={style.icon}></i>
                </div>
                {showForm === true &&
                  <>
                  {
                    found === true ? 
                    <>
                        <label htmlFor='serie'>Número de serie</label>
                        <input type='text' name='serie' value={carData.serialNumber}/>
                        <label htmlFor='motor'>Número de motor</label>
                        <input type='text' name='motor' value={carData.motorNumber}/>
                    </>
                    :
                    <>
                        <label htmlFor='serie'>Número de serie</label>
                        <input type='text' name='serie' onChange={e=> setCarData({...carData, serialNumber: e.target.value})}/>
                        <label htmlFor='motor'>Número de motor</label>
                        <input type='text' name='motor' onChange={e=> setCarData({...carData, motorNumber: e.target.value})}/>
                    </>
                }
                  </>
                }
            </form>
            {showForm === true &&
              <GeneralButton text='Continuar' route='/datos-personales' back='/planes' click={update}/>
            }
        </div>
        : <Loading />
    }
        </>
     );
EN

回答 1

Stack Overflow用户

发布于 2020-11-17 12:03:56

试试这个:

代码语言:javascript
复制
const handleEvent = (event) => {
    if(event.key === 'Enter') {
        event.preventDefault();
        setEnteredPlates(event.target.value);
        findPlates()
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64869095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档