html 如何在输入[type=“date”]处于焦点时显示日历弹出

hsgswve4  于 2023-08-01  发布在  其他
关注(0)|答案(6)|浏览(165)

有没有一种方法可以在输入元素的焦点上激活原生的HTML5日期选择器下拉列表?
大输入元素:
x1c 0d1x的数据
目前,我只能通过单击输入元素最右侧的箭头来使用日历。
大输入元素单击箭头



我想在输入元素的焦点上激活此日历。
下面是有问题的代码。

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Test</title>
  </head>
  <style media="screen">
  .form-question {
    display: flex;
    flex-direction: column;
    justify-content: center;
    margin: 0 0 3rem;
    min-height: 3rem;
  }
  .form-question__title {
    color: #342357;
    font-size: 1.5rem;
    padding: 1rem;
  }
  .input-container {
    border-bottom: solid 2px #333333;
  }
  .input-container input {
    border: none;
    box-sizing: border-box;
    outline: 0;
    padding: .75rem;
    width: 100%;
  }
  </style>
  <body>
    <div class="form-question">
      <div class="form-question__title">
        <span>Effective Date</span>
      </div>
      <div class="input-container">
        <input id="effective-date" type="date" name="effective-date" minlength="1" maxlength="64" placeholder=" " autocomplete="nope" required="required"></input>
        <span class="bar"></span>
      </div>
    </div>
  </body>
</html>

字符串
CSS解决方案首选,但JavaScript是受欢迎的,请不要jQuery。
提前感谢!

eoigrqb6

eoigrqb61#

对于任何遇到这个问题的人,我解决了这个问题(webkit only firefox似乎也尊重这一点),将calendar-picker-indicator设置为输入的全高和全宽,如here所示。

.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;
}

个字符
Full-Width Clickable Calendar Dropdown

j0pj023g

j0pj023g2#

单线解

<input type="date" onfocus="this.showPicker()">

字符串
工作类型“时间”和“日期时间本地”太

6ioyuze2

6ioyuze23#

为什么不使用js

const inputDate = document.getElementById("inputId");

inputDate.addEventListener("focus",function (evt) {
  if (this.getAttribute("type")==="date") {
    this.showPicker();
  }
});

字符串

kuhbmx9i

kuhbmx9i4#

input[type="date"] {
        position: relative;
    }

    /* create a new arrow, because we are going to mess up the native one
    see "List of symbols" below if you want another, you could also try to add a font-awesome icon.. */
    input[type="date"]:after {
        content: "\25BC"; 
        color: #555;
        padding: 0 5px;
    }

    /* change color of symbol on hover */
    input[type="date"]:hover:after {
        color: #bf1400;
    }

    /* make the native arrow invisible and stretch it over the whole field so you can click anywhere in the input field to trigger the native datepicker*/
    input[type="date"]::-webkit-calendar-picker-indicator {
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        width: auto;
        height: auto;
        color: transparent;
        background: transparent;
    }

    /* adjust increase/decrease button */
    input[type="date"]::-webkit-inner-spin-button {
        z-index: 1;
    }

    /* adjust clear button */
    input[type="date"]::-webkit-clear-button {
        z-index: 1;
    }

字符串

qzwqbdag

qzwqbdag5#

Pimped@MJ12358解决方案一点,所以图标被保留。

input {
    position: relative;
}

input[type="date"]::-webkit-calendar-picker-indicator {
    background-position: right;
    background-size: auto;
    cursor: pointer;
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    top: 0;
    width: auto;
}

个字符

krugob8w

krugob8w6#

  • 这个答案是为了给阿比德的当前答案添加细节。*

您可以使用showPicker API以编程方式显示常见浏览器实现中的选取器:
通常浏览器会针对下列类型的输入实作它:“日期”、“月”、“周”、“时间”、“本地日期时间”、“颜色”或“文件”。

document.querySelectorAll("button").forEach((button) => {
  button.addEventListener("click", (event) => {
    const input = event.srcElement.previousElementSibling;
    try {
      input.showPicker();
    } catch (error) {
      window.alert(error);
    }
  });
});

个字符
我还测试了隐藏的input,如上所示。选择器仍然成功显示。
请注意,有一些安全要求。最值得注意的是:

  • 需要临时用户激活。用户必须与页面或UI元素进行交互,才能使此功能正常工作。
  • 正如您在上面的示例代码中所看到的,它不适用于date输入,但适用于StackOverflow,因为它在iframe中:

注意:日期、日期时间-本地、月、时间、周的选取器以相同的方式启动。它们无法在此处显示,因为实时示例在跨源框架中运行,并且会导致SecurityError

相关问题