HTMLInputElement: showPicker() 方法

Baseline 广泛可用 *

此功能已成熟,并可在多种设备和浏览器版本上运行。自 2022 年 9 月起,所有浏览器都已支持此功能。

* 此特性的某些部分可能存在不同级别的支持。

HTMLInputElement.showPicker() 方法会显示浏览器为 input 元素提供的选择器。

这与元素被选中时通常会显示的同一个选择器,但可以从按钮点击或其他用户交互中触发。

浏览器通常会为以下类型的输入实现此功能:"date""month""week""time""datetime-local""color""file"。它还可以预填充来自 <datalist> 元素或 autocomplete 属性的项目。

更广泛地说,此方法理想情况下应该显示平台任何具有选择器的输入元素的选择器。

语法

js
showPicker()

参数

无。

返回值

无(undefined)。

异常

InvalidStateError DOMException

如果元素不可变,则会抛出此异常,这意味着用户无法修改它和/或无法自动预填充它。

NotAllowedError DOMException

如果不是由用户操作(例如触摸手势或鼠标点击)明确触发,则会抛出此异常(选择器需要 瞬时激活)。

SecurityError DOMException

如果在跨域 iframe 中调用,则会抛出此异常,文件和颜色选择器除外(出于历史原因豁免)。

安全

需要瞬时用户激活。用户必须与页面或 UI 元素进行交互才能使此功能正常工作。

示例

特性检测

下面的代码显示了如何检查 showPicker() 是否受支持

js
if ("showPicker" in HTMLInputElement.prototype) {
  // showPicker() is supported.
}

普通输入选择器

此示例展示了此功能如何用于 colorfile 输入选择器。

注意: datedatetime-localmonthtimeweek 的选择器以相同方式启动。此处无法显示它们,因为实时示例在跨域框架中运行,并且会引起 SecurityError

HTML

html
<p>
  <input type="color" />
  <button id="color">Show the color picker</button>
</p>

<p>
  <input type="file" />
  <button id="file">Show the file picker</button>
</p>

JavaScript

代码只是获取所选按钮的前一个元素,并对其调用 showPicker()

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

结果

点击每个输入类型旁边的按钮以显示其选择器。

datalist 输入的 showPicker()

showPicker() 可以启动在 <datalist> 中定义的选项列表的选择器。

首先,我们在 HTML 中定义一个包含多个互联网浏览器的 <datalist>,一个使用它的 text 类型输入,以及一个按钮。

html
<datalist id="browsers">
  <option value="Chrome"></option>
  <option value="Firefox"></option>
  <option value="Opera"></option>
  <option value="Safari"></option>
  <option value="Microsoft Edge"></option>
</datalist>

<input type="text" list="browsers" />
<button>Select browser</button>

下面的代码添加了一个事件监听器,当按钮被点击时调用 showPicker()

js
const button = document.querySelector("button");
const browserInput = document.querySelector("input");

button.addEventListener("click", () => {
  try {
    browserInput.showPicker();
  } catch (error) {
    // Fall back to another picker mechanism
  }
});

autocomplete 的 showPicker()

showPicker() 可以启动 autocomplete 输入的选择器。

这里我们定义了一个接受“name”的 autocomplete 选项的输入。

html
<input autocomplete="name" /> <button>Show autocomplete options</button>

下面的代码显示当按钮被点击时,输入的选择器。

js
const button = document.querySelector("button");
const browserInput = document.querySelector("input");

button.addEventListener("click", () => {
  try {
    browserInput.showPicker();
  } catch (error) {
    // Fall back to another picker mechanism
  }
});

规范

规范
HTML
# dom-input-showpicker

浏览器兼容性

另见