标签: html-datalist

如何使用javascript显示datalist建议?

我发现新的<datalist>一般非常有用,但我认为这些建议不够明显.有没有办法触发使用javascript显示datalist建议?

举个例子,我在<input type="number">(jsFiddle)上有一个数据.

<label>
    Enter a Fibonacci number:
    <input type="number" list="fibonacci" min="0" id="myinput">
</label>
<datalist id="fibonacci">
    <option value="0">
    <option value="1">
    <option value="2">
    <option value="3">
    <option value="5">
    <option value="8">
    <option value="13">
    <option value="21">
</datalist>
<button type="button" id="show-suggestions">Show suggestions</button>

<script>
$('#show-suggestions').click(function() {
    // .showSuggestions() does not exist.
    // I'd like it to display the suggested values for the input field.
    $('#myinput').showSuggestions();
});
</script>
Run Code Online (Sandbox Code Playgroud)

在Chrome中,仅当输入为空,已有焦点且用户随后点击输入时,才会显示完整的建议列表.向下箭头不显示建议 - 它只是递减值.

我想让建议更加明显.作为一个例子,我添加了一个应该打开建议列表的按钮.我在onClick处理程序中放了什么?

我在本例中使用了Chrome,jQuery和数字输入,但我更喜欢独立于所有这些的通用解决方案.

javascript html5 html-datalist

11
推荐指数
1
解决办法
4259
查看次数

设置隐藏的datalist选项值

在下面的代码段中,我有两种方法可以选择项目:使用datalist输入和使用选项进行传统选择.

select元素保持选项值隐藏,我们仍然可以使用它this.value.但是,对于datalist,实际显示该值,并且该选项的文本内容显示为辅助标签.

我想要的是让输入+数据主义方法的行为类似于传统的选择,其中"Foo"和"Bar"显示为选项,当选择时分别具有值"1"和"2".

我还添加了一个重复的名称"Foo",其值为"3".这表明任何解决方案都不能依赖于唯一选项.

<input list="options" onchange="console.log(this.value)"/>
<datalist id="options">
  <option value="1">Foo</option>
  <option value="2">Bar</option>
  <option value="3">Foo</option>
</datalist>

<select onchange="console.log(this.value)">
  <option value=""></option>
  <option value="1">Foo</option>
  <option value="2">Bar</option>
  <option value="3">Foo</option>
</select>
Run Code Online (Sandbox Code Playgroud)

html html5 html-select html-datalist

11
推荐指数
2
解决办法
2万
查看次数

是否有HTML5 DataList的SelectedIndex?

您可以选择option任何select元素的当前值:

mySelect.options[mySelect.selectedIndex]
Run Code Online (Sandbox Code Playgroud)

我可以用DataList做同样的事吗?像这样的东西:

<input id = "input" list = "datalist" type = "text" />

<datalist id = "datalist">
    <option value = "No. 1"></option>
    <option value = "No. 2"></option>
    <option value = "No. 3"></option>
</datalist>

<script>
    var datalist = document.getElementById ("datalist");
    var input = document.getElementById ("input");

    input.addEventListener ("keyup", function (event) {
        if (event.which === 13) {
            alert (datalist.options[datalist.selectedIndex]); // Example
        }
    }, false);
</script>
Run Code Online (Sandbox Code Playgroud)

javascript html5 html-datalist

10
推荐指数
1
解决办法
2万
查看次数

输入列表选择更改事件

我有这个例子:

<datalist id="browsers">
  <option value="Internet Explorer">
  <option value="Firefox">
  <option value="Google Chrome">
  <option value="Opera">
  <option value="Safari">
</datalist>
Run Code Online (Sandbox Code Playgroud)

当用户选择选项(使用鼠标或键盘)时,我需要捕获一个事件.

我试着做onchange ="MySuperFunction();" 但这仅适用于选择项目然后列表未聚焦的情况.

html events input list html-datalist

10
推荐指数
1
解决办法
3万
查看次数

使用JavaScript在IE9中获取datalist选项

这段代码适用于除Internet Explorer 9之外的所有主流浏览器.我不明白我做错了什么,这可能是我想念的简单.

复制此代码(或使用此jsFiddle)来查看IE9中的问题:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
        <title>Datalist fetching in IE9</title>
        <script type="text/javascript">
        //document.createElement('datalist');//this seems to fix it for IE6, but not for IE9
        window.onload = function() {
            alert(document.getElementById('languages').getElementsByTagName('option').length);//should alert 42
        };
        </script>
    </head>
    <body>
    <form method="post">
    <input name="language" type="text" value="English" list="languages" />
    <datalist id="languages">
        <option value="Arabic" />
        <option value="Bengali" />
        <option value="Bulgarian" />
        <option value="Catalan" />
        <option value="Chinese" />
        <option value="Croatian" />
        <option value="Czech" />
        <option value="Danish" />
        <option value="Dutch" /> …
Run Code Online (Sandbox Code Playgroud)

javascript html5 cross-browser internet-explorer-9 html-datalist

9
推荐指数
1
解决办法
1万
查看次数

HTML5 datalist值与内部文本

我有一个问题,表现在Chrome和Firefox处理HTML5 datalist元素之间.

我可能正在滥用它,Firefox正在以我期望的方式处理,但Chrome不是.我没有在Opera上试过它.这是针对内部页面的,因此我可以控制正在使用的浏览器.

我设置了一个值,以及内部文本,如:

<input list="Names" placeholder="Enter Name or ID" name="txtSearchValue" autocomplete="off"/>
<datalist id="Names"><%=OptionsList%></datalist>
Run Code Online (Sandbox Code Playgroud)

服务器端值"OptionsList"是从数据库查询动态构建的.最终结果大致如下:

<option value="123">Sam's Fresh Sandwiches</option>
<option value="234">Sawatdee</option>
Run Code Online (Sandbox Code Playgroud)

等等

在Firefox上,我可以输入字母"S",然后输入"A"(不区分大小写),并且上面的两个条目都会出现.只要我键入"W"或用鼠标选择Sawatdee,文本框就会填充为234.这就是我希望发生的事情 - 因为我希望234发送回服务器而不是Sawatdee.如果我输入"A"然后输入"T",它也有效.

在Chrome上,我可以输入我想要的所有字母,但列表中不会显示任何内容.但是,如果我键入2,则只会出现第二个条目; 但是在列表中它会显示一个2,然后是Sawatdee.

我是否过度使用/滥用数据列表,或Chrome是否存在问题?或者是Chrome处理它,因为它在技术上应该是,我发现了一个Firefox错误?

html5 html-datalist

9
推荐指数
1
解决办法
1万
查看次数

DataList和Enter键事件

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

HAML:

%input#myField{:type => "text"}
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

但是现在我想在这个输入上添加datalist.

HAML:

%input#myField{:list => "htmlList", :type => "text"}
%datalist#htmlList
    %option{:value => "toto"} toto
    %option{:value => "foo"} foo
Run Code Online (Sandbox Code Playgroud)

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

所以我的问题是:

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

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

javascript html5 html-datalist

9
推荐指数
1
解决办法
6919
查看次数

如何使用JavaScript刷新HTML5数据表?

我正在datalist动态地将选项加载到HTML5 元素中.但是,浏览器会尝试datalist在加载选项之前显示.这导致列表未被显示或者有时显示部分列表.有没有办法在加载选项后通过JavaScript刷新列表?

HTML

<input type="text" id="ingredient" list="ingredients">
<datalist id="ingredients"></datalist>
Run Code Online (Sandbox Code Playgroud)

JavaScript的

$("#ingredient").on("keyup", function(event) {
    var value = $(this).val();
    $.ajax({
        url: "/api/ingredients",
        data: {search: value.length > 0 ? value + "*" : ""},
        success: function(ingredients) {
            $("#ingredients").empty();
            for (var i in ingredients) {
                $("<option/>").html(ingredients[i].name).appendTo("#ingredients");
            }
            // Trigger a refresh of the rendered datalist
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

注意:在Chrome和Opera中,仅当用户在输入文本后单击输入时,才会显示整个列表.但是,我希望整个列表显示用户类型.Firefox不是问题,因为它似乎在更新选项时自动刷新列表.

UPDATE

我不确定这个问题是否有令人满意的答案,因为我认为这只是某些浏览器的缺点.如果a datalist已更新,浏览器刷新列表,但某些浏览器(包括Chrome和Opera)根本不这样做.黑客?

javascript ajax jquery html5 html-datalist

9
推荐指数
2
解决办法
1万
查看次数

从datalist onhover获取当前值

我正在尝试获取数据主义者的悬停元素的当前值.因此,如果我打开带有值的datalist并将鼠标移到它们上面,我希望这些值出现在控制台中.

这是我的尝试:

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

$("#browsers").on("mouseover", function() {
  console.log($(this).value());
});
Run Code Online (Sandbox Code Playgroud)

这是一个小提琴:https://jsfiddle.net/sshcvr5q/

javascript jquery html-datalist

9
推荐指数
1
解决办法
516
查看次数

React.js是否支持HTML5 datalist?

我正在尝试以最简单的方式实现HTML5 datalist元素.

像这样的东西:

<input list="browsers">

<datalist id="browsers">
  <option value="Internet Explorer">
  <option value="Firefox">
  <option value="Chrome">
  <option value="Opera">
  <option value="Safari">
</datalist>
Run Code Online (Sandbox Code Playgroud)

但这不起作用.如果不安装(npm)其他东西,我的下一步是什么.

基本上,我正在使用普通输入反应元素并希望嵌入数据列表.

这是我的反应代码:

    <input className={"custom_input inline "+this.isValidInteger(this.props.price.price_first,0,2000000)} 
    style={{marginRight:'5px'}} 
    value={this.props.price.price_first || ''} type="text"
    onChange={(e)=>this.props.dispatch({type:"price", payload:e.target.value})} 
    placeholder=" Unesite..." 
    maxLength="10"/>
Run Code Online (Sandbox Code Playgroud)

所以我想要一个下拉列表.

javascript html5 reactjs html-datalist

9
推荐指数
2
解决办法
7670
查看次数