【问题标题】:Trigger html5 input datalist dropdown to show up触发 html5 输入数据列表下拉显示
【发布时间】:2022-01-06 11:22:25
【问题描述】:

<datalist> 中具有预定义值的HTML5 <input> 元素中,当用户输入匹配值或点击down 键时,下拉列表会显示。

有没有办法触发这个下拉列表显示?我可能会在 Angular 中动态更改 datalist,因此希望有一种方法可以触发此列表的显示。

  <input list="browsers" name="browser">
  <datalist id="browsers">
    <option value="Internet Explorer">
    <option value="Firefox">
    <option value="Chrome">
    <option value="Opera">
    <option value="Safari">
  </datalist>

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    是的,我们可以:

    var keyboardEvent = document.createEvent("KeyboardEvent");
    var initMethod = typeof keyboardEvent.initKeyboardEvent !== 'undefined' ? "initKeyboardEvent" : "initKeyEvent";
    
    keyboardEvent[initMethod](
      "keyup", // event type : keydown, keyup, keypress
      true, // bubbles
      true, // cancelable
      window, // viewArg: should be window
      false, // ctrlKeyArg
      false, // altKeyArg
      false, // shiftKeyArg
      false, // metaKeyArg
      40, // keyCodeArg : unsigned long the virtual key code, else 0
      0 // charCodeArgs : unsigned long the Unicode character associated with the depressed key, else 0
    );
    document.getElementById("test").focus();
    document.getElementById("test").dispatchEvent(keyboardEvent);
    <input id="test" list="browsers" name="browser">
    <datalist id="browsers">
      <option value="Internet Explorer">
      <option value="Firefox">
      <option value="Chrome">
      <option value="Opera">
      <option value="Safari">
    </datalist>

    使用dispatchEventcreateEvent。 IE9+、Chrome、FF均支持。

    【讨论】:

    • 它在触摸键盘上不起作用,为什么?我应该发送按键触发器吗?单击触摸键盘键时我想打开列表
    • 我最终这样做了(唉,一个 jquery 修复):$(element).trigger(jQuery.Event('keyup', { keycode: 40 }));
    猜你喜欢
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    相关资源
    最近更新 更多