Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I show the HTML input date when clicking text or an image?

I want to pop up a date picker when I click some text or an image. I am using reactjs. I'm using the HTML input type="date" not the React-datepicker library.

Here is my code:

    import { useRef } from "react";
    const add = () => {
      const interviewDateRef = useRef();
      const handleInterviewDateClick = () => {
        interviewDateRef.current.focus();
      };
    
      return (
        <>
          <button onClick={handleInterviewDateClick}>Change Date</button>
          <input type="date" ref={interviewDateRef} className="hidden" />
        </>
      );
    };
    export default add;

Here is the codesandbox.

I want the date picker to work normally, but also to appear when clicking on text or an image. How can I do that?

Thank you.

like image 414
Gerry Avatar asked Aug 21 '21 14:08

Gerry


People also ask

How do I display the date format in input?

To set and get the input type date in dd-mm-yyyy format we will use <input> type attribute. The <input> type attribute is used to define a date picker or control field. In this attribute, you can set the range from which day-month-year to which day-month-year date can be selected from.

How do you input a date in HTML?

The <input type="date"> defines a date picker. The resulting value includes the year, month, and day. Tip: Always add the <label> tag for best accessibility practices!

How do you display the current date in a field in HTML?

moment(). format('YYYY-MM-DD'); moment() returns an object representing the current date and time.

How do you show only the year in input type date?

Example: Using JQuery datepicker tag To use year input type, we will be using jQuery to add datepicker. It is used with the text input type. On running the program, only the year will be visible.


3 Answers

You can manage to do this by opening the dropdown on focus. Since clicking the button focus the input.

Here is how to do so

// Get a hook function
const {useRef} = React;

const Add = () => {
  const interviewDateRef = useRef();
  const handleInterviewDateClick = () => {
    interviewDateRef.current.focus();
  };

  return (
    <div>
      <button onClick={handleInterviewDateClick}>Change Date</button>
      <input type="date" ref={interviewDateRef} className="hidden" />
    </div>
  );
};

// Render it
ReactDOM.render(
  <Add />,
  document.getElementById("react")
);
.input-container input {
    border: none;
    box-sizing: border-box;
    outline: 0;
    padding: .75rem;
    position: relative;
    width: 100%;
}

input[type="date"]::-webkit-calendar-picker-indicator {
    background: transparent;
    bottom: 0;
    color: transparent;
    cursor: pointer;
    height: auto;
    left: 0;
    position: absolute;
    right: 0;
    top: 0;
    width: auto;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>
<div id="react"></div>

Check this SO answer for more info

like image 192
Joyescat Avatar answered Oct 18 '22 22:10

Joyescat


I think there is no need of react JS if you are using input type date then there automatically when you click on it, it pop up is the date a picker window you can edit it with CSS

like image 41
Lalan Kumar Avatar answered Oct 18 '22 22:10

Lalan Kumar


The label element may do exactly what you are looking for without any extra javascript. As long as the label's for (htmlFor in React) is linked to the input's id or the input is nested in the label it should open the calendar. There may be some cross-browser differences here though.

<>
  <label htmlFor="input-id">Change Date</button>
  <input id="input-id" type="date" />
</>
like image 1
tenor528 Avatar answered Oct 18 '22 23:10

tenor528