DataList和Enter键事件

时间:2013-04-21 13:26:24

标签: javascript html5 html-datalist

我有一个输入文本字段,我在其上触发键事件。在输入时,我使用输入值处理一些特定代码。一切都很棒。

HAML:

%input#myField{:type => "text"}

JavaScript的:

my_field = document.getElementById('myField');

my_field.addEventListener("keypress", function (event) {
    if (event.keyCode == 13) {
        event.preventDefault();

        if (tag_field.value.length != 0) {
            console.log(my_field.value);
            // Run my specific process with my_field.value 
            my_field.value = '';
        }
    }
}, false);

但现在我想在此输入上添加datalist。

HAML:

%input#myField{:list => "htmlList", :type => "text"}
%datalist#htmlList
    %option{:value => "toto"} toto
    %option{:value => "foo"} foo

问题是当我在datalist上导航以选择项目时,我按下回车键。 在输入键时,我的监听器被调用并使用输入的初始值处理我的代码 在此步骤中,该字段的值为空。之后,该值将替换为在datalist中选择的值。

所以我的问题是:

  • 有没有办法改变数据列表的行为,用datalist选择的值替换输入值而不按Enter键? (禁用数据列表的输入键)

  • 有没有办法检测datalist何时处于活动状态(或可见状态)以处理EventListener中的其他行为?

1 个答案:

答案 0 :(得分:3)

按键后但在数据注册到字段之前,将触发

Keypress事件。 按下密钥但在将数据注册到字段

之后,将触发Keyup事件

<强> HTML:

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

<强> JS:

var my_field = document.getElementById('myField');

      my_field.addEventListener("keyup", function (event) {
          if (event.keyCode == 13) {
              event.preventDefault();

              if (my_field.value.length != 0) {
                  console.log(my_field.value);
                  // Run my specific process with my_field.value 
                  my_field.value = '';
              }
          }
      }, false);

http://jsfiddle.net/5p6FZ/

相关问题