javascript 如何设置ReactJS输入字段,变量最大值取决于其他输入

7lrncoxx  于 2022-12-28  发布在  Java
关注(0)|答案(1)|浏览(103)

我正在尝试设置一个React表单,并为日、月和年设置一个数字输入字段(刚开始编写代码),我希望限制日的最大输入值以表示月中的天数。
我试过使用if语句,它产生了正确的结果,我认为如果在修改月份值之后调用if语句,它会拉取数据,并在提交表单时踢出一个html5错误,但这不起作用。

import { useState } from "react";
import { useCookies } from 'react-cookie'
import { useNavigate } from "react-router-dom";
import axios from "axios";

const handleChange = (e) => {
    const value =
    e.target.type === "checkbox" ? e.target.checked : e.target.value;
    const name = e.target.name;

const maxDayInMonth = (month, year) =>{    
    if(month === 2 && year % 4 !== 0){
      setMaxDay = 28
    } else if(month === 2 && year % 4 === 0){
      return 29
    } else if(month === 4 || month === 6 || month === 9 || month === 11){
      return 30
    } else { 
      return 31
    }
  }

const minYear = new Date().getFullYear() - 100
const maxYear = new Date().getFullYear() - 18
return (
<>
   <input
      id="dob_day"
      type="number"
      name="dob_day"
      placeholder="DD"
      min = "1"
      max = {maxDayInMonth(formData.dob_month, formData.dob_year)}
      required={true}
      value={formData.dob_day}
      onChange={handleChange}
   />
   <input
      id="dob_month"
      type="number"
      name="dob_month"
      placeholder="MM"
      min = "1"
      max = "12"
      required={true}
      value={formData.dob_month}
      onChange={handleChange}
   />
   <input 
      id="dob_year"
      type="number"
      name="dob_year"
      placeholder="YYYY"
      min = {minYear}
      max = {maxYear}
      required={true}
      value={formData.dob_year}
      onChange={handleChange}
   />
</>
)

为了让它成功我还有什么没做的?
我只是想,也许我应该使用useState,因为用户输入会导致修改,但既然我输入了这个,我就要问一下,以防我错了。

rqcrx0a6

rqcrx0a61#

const[selectedDay,setSelectedDay] = useState(1)
const[selectedMonth,setSelectedMonth] = useState(1)
const[selectedYear,setSelectedYear] = useState(2000)

然后用这个函数替换handleChange:

const getValue = (e) => {
return e.target.type === "checkbox" ? e.target.checked : e.target.value;
}

在您的输入中:

//Year
  <input
  value={selectedYear}
  onChange={(e) => {
  setSelectedYear(getValue(e))
  }}
  />
// Month
<input
  value={selectedMonth}
  onChange={(e) => {
  setSelectedMonth(getValue(e))
  }}
  />
<input
  max = {maxDayInMonth(selectedMonth,selectedYear)}
  value={selectedDay}
  onChange={(e) => {     
  setSelectedDay(getValue (e))
  }
  />

相关问题