简体   繁体   English

如何使用 onKeyPress (React JS) 激活右键?

[英]How activate the right button with onKeyPress (React JS)?

My code looks quite complicated so I am showing you screens first.我的代码看起来很复杂,所以我先向您展示屏幕。 I made a form on different pages with react, and I just have to press "enter" button to have next question.我用反应在不同的页面上制作了一个表格,我只需要按“输入”按钮就有下一个问题。 I tried to add this attribute onKeyPress={(e) => e.key === 'Enter'} on "enter" button in order to go to next question when I press "Enter" on my keyboard.我尝试在“输入”按钮上添加此属性onKeyPress={(e) => e.key === 'Enter'} ,以便在我按键盘上的“输入”时转到下一个问题。 Currently, it works to move to the second question but at the second question it activates "return" button and makes me go back to previous question.目前,它可以转到第二个问题,但在第二个问题上它会激活“返回”按钮并让我回到上一个问题。

How could the function work only for "enter" button ?该功能如何仅适用于“输入”按钮?

第一个问题 第二个问题

import React, { useState } from 'react'
import Gender from './Questions/Gender';
import Firstname from './Questions/Firstname';
import Lastname from './Questions/Lastname';
import Birthdate from './Questions/Birthdate';
import Occupation from './Questions/Occupation';
import City from './Questions/City';
import Nationality from './Questions/Nationality';
import NativeLanguage from './Questions/NativeLanguage';
import PracticedLanguages from './Questions/PracticedLanguages';
import Email from './Questions/Email';
import Password from './Questions/Password';
import PasswordConfirmation from './Questions/PasswordConfirmation';

function FormSubscription() {

    const [page, setPage] = useState(0);
    const [formData, setFormData] = useState({
        gender:"",
        firstname:"",
        lastname:"",
        birthdate:"",
        occupation:"",
        city:"",
        nationality:"",
        nativeLanguage:"",
        practicedLanguages:"",
        email:"",
        password:"",
        confirmPassword:"",
    })

    const PageDisplay = () => {
        if (page === 0) {
            return <Gender formData={formData} setFormData={setFormData} />
        } else if (page === 1) {
            return <Firstname formData={formData} setFormData={setFormData} />
        } else if (page === 2) {
            return <Lastname formData={formData} setFormData={setFormData} />
        } else if (page === 3) {
            return <Birthdate formData={formData} setFormData={setFormData} />
        } else if (page === 4) {
            return <Occupation formData={formData} setFormData={setFormData} />
        } else if (page === 5) {
            return <City formData={formData} setFormData={setFormData} />
        } else if (page === 6) {
            return <Nationality formData={formData} setFormData={setFormData} />
        } else if (page === 7) {
            return <NativeLanguage formData={formData} setFormData={setFormData} />
        } else if (page === 8) {
            return <PracticedLanguages formData={formData} setFormData={setFormData} />
        } else if (page === 9) {
            return <Email formData={formData} setFormData={setFormData} />
        } else if (page === 10) {
            return <Password formData={formData} setFormData={setFormData} />
        } else {
            return <PasswordConfirmation formData={formData} setFormData={setFormData} />}
    }

    let next = false
    if (page === 0 & formData.gender === "") {
        next = true
    } else if (page === 1 & formData.firstname === "") {
        next = true
    } else if (page === 2 & formData.lastname === "") {
        next = true
    } else if (page === 3 & formData.birthdate === "") {
        next = true
    } else if (page === 4 & formData.occupation === "") {
        next = true
    } else if (page === 5 & formData.city === "") {
        next = true
    } else if (page === 6 & formData.nationality === "") {
        next = true
    } else if (page === 7 & formData.nativeLanguage === "") {
        next = true
    } else if (page === 9 & formData.email === "") {
        next = true
    } else if (page === 10 & formData.password === "") {
        next = true
    } else if (page === 11 & formData.confirmPassword === "") {
        next = true
    } else {
        next = false
    }

    const validerForm = (event) => {
        event.preventDefault();
        console.log(event)
    }

  return (
    <div className='form container'>
        <form onSubmit={validerForm}>
            <div className='body'>{PageDisplay()}</div>
            <div className='footer d-flex mt-4'>
                {page !== 0 ? <button
                    onClick={() => {setPage((currentPage) => currentPage - 1)}}>retour</button> : ""}
                <button 
                    className='ms-auto'
                    disabled={next}
                    onKeyPress={(e) => e.key === 'Enter'}
                    onClick={() => {
                        if (page === FormTitles.length - 1) {
                            console.log(formData)
                        } else {
                            setPage((currentPage) => currentPage + 1);
                        }
                    }}
                >
                    {page === FormTitles.length - 1 ? "enregistrer" : "entrer"}
                </button>
            </div>
        </form>
    </div>
  );
}

export default FormSubscription;

Add the listiner to the window object将监听器添加到窗口对象

  useEffect(() => {
    window.addEventListener("keydown", (e) => doSomthing(e))
  })

For example例如

function Main() {

  function doSomthing(e) {
    //Your action here
    console.log(e)
  }

  useEffect(() => {
    window.addEventListener("keydown", (e) => {
      if (e.key === 'Enter') {
        doSomthing(e)
      }
    })
  })

  return (
    <h1>My component</h1>
  );
}

And your code should look like:您的代码应如下所示:

function FormSubscription() {

    const [page, setPage] = useState(0);

    function doSomthing(e) {
        if (page === FormTitles.length - 1) {
            console.log(formData)
        } else {
            setPage((currentPage) => currentPage + 1);
        }    
    }
  
    useEffect(() => {
      window.addEventListener("keydown", (e) => {
        if (e.key === 'Enter') {
          doSomthing(e)
        }
      })
    })

    const [formData, setFormData] = useState({
        gender:"",
        firstname:"",
        lastname:"",
        birthdate:"",
        occupation:"",
        city:"",
        nationality:"",
        nativeLanguage:"",
        practicedLanguages:"",
        email:"",
        password:"",
        confirmPassword:"",
    })

    const PageDisplay = () => {
        if (page === 0) {
            return <Gender formData={formData} setFormData={setFormData} />
        } else if (page === 1) {
            return <Firstname formData={formData} setFormData={setFormData} />
        } else if (page === 2) {
            return <Lastname formData={formData} setFormData={setFormData} />
        } else if (page === 3) {
            return <Birthdate formData={formData} setFormData={setFormData} />
        } else if (page === 4) {
            return <Occupation formData={formData} setFormData={setFormData} />
        } else if (page === 5) {
            return <City formData={formData} setFormData={setFormData} />
        } else if (page === 6) {
            return <Nationality formData={formData} setFormData={setFormData} />
        } else if (page === 7) {
            return <NativeLanguage formData={formData} setFormData={setFormData} />
        } else if (page === 8) {
            return <PracticedLanguages formData={formData} setFormData={setFormData} />
        } else if (page === 9) {
            return <Email formData={formData} setFormData={setFormData} />
        } else if (page === 10) {
            return <Password formData={formData} setFormData={setFormData} />
        } else {
            return <PasswordConfirmation formData={formData} setFormData={setFormData} />}
    }

    let next = false
    if (page === 0 & formData.gender === "") {
        next = true
    } else if (page === 1 & formData.firstname === "") {
        next = true
    } else if (page === 2 & formData.lastname === "") {
        next = true
    } else if (page === 3 & formData.birthdate === "") {
        next = true
    } else if (page === 4 & formData.occupation === "") {
        next = true
    } else if (page === 5 & formData.city === "") {
        next = true
    } else if (page === 6 & formData.nationality === "") {
        next = true
    } else if (page === 7 & formData.nativeLanguage === "") {
        next = true
    } else if (page === 9 & formData.email === "") {
        next = true
    } else if (page === 10 & formData.password === "") {
        next = true
    } else if (page === 11 & formData.confirmPassword === "") {
        next = true
    } else {
        next = false
    }

    const validerForm = (event) => {
        event.preventDefault();
        console.log(event)
    }

  return (
    <div className='form container'>
        <form onSubmit={validerForm}>
            <div className='body'>{PageDisplay()}</div>
            <div className='footer d-flex mt-4'>
                {page !== 0 ? <button
                    onClick={() => {setPage((currentPage) => currentPage - 1)}}>retour</button> : ""}
                <button 
                    className='ms-auto'
                    disabled={next}
                    onClick={doSomething}
                >
                    {page === FormTitles.length - 1 ? "enregistrer" : "entrer"}
                </button>
            </div>
        </form>
    </div>
  );
}

export default FormSubscription;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM