包含特定条款的自动填写表单
Autocomplete Form with Specific Terms
我正在使用一个使用Phoenix框架(用Elixir编写)开发的Web应用程序。
我有一个表单字段,目前如下所示:
<div class="form-group">
<%= select f, :category_id, @categories, class: "form-control" %>
<%= error_tag f, :category_id %>
</div>
这允许用户从下拉列表中选择一个类别(这没关系);但是,我希望用户看到的是一个标准文本字段,它将在他们开始键入时自动填写与我的数据库中的类别一起输入的字符串。
功能与我们在堆栈溢出上发布问题时使用的标签字段非常相似。
使用Phoenix应用程序执行此操作的最佳方法是什么?我尝试过使用 jQuery 自动完成;但是,我想要一个更"轻量级"的解决方案(不需要jQuery)。
任何想法都非常感谢。谢谢你的时间。
我能想到的唯一不涉及JavaScript的解决方案是数据列表。这是一个很棒的新 HTML5 元素,可以完全满足您的需求,但它的浏览器支持不是很好(2021 年更新:现在的支持要好得多)。
如果你想避免JQuery,但仍然可以使用其他一些JS小部件,你应该看看Awesomplete - "一个超轻量级,可自定义,简单的自动完成小部件,零依赖"。如果包括最小的JS和CSS文件,它们的总和只有大约8kb。实现起来也非常容易:
<input class="awesomplete"
data-list="category1, category2, category3, category4, category5" />
它甚至可以附加到您当前的选择框(不过您必须隐藏它):
<style>
#mylist { display: none; }
</style>
<div class="form-group">
<input class="awesomplete" list="mylist" />
<%= select f, :category_id, @categories, class: "form-control", id: "mylist" %>
<%= error_tag f, :category_id %>
</div>
当然不要忘记在脑海中添加JS和CSS文件:
<link rel="stylesheet" href="awesomplete.css" />
<script src="awesomplete.min.js" async></script>
纯原版 JavaScript 解决方案,与支持 JavaScript 的每个框架兼容
- 在这种方法中,监听一个文本框进行键控,每次事件发生时,输入文本都会与预定义的输入集匹配,如果找到,则作为 li 元素添加到底层 UL 标签中
- 在这里,li的css取自chrome上呈现的文本框,可以根据自己的喜好进行自定义
- 关于从数据库部分内获取值或标签也不是问题,您可以使用 ajax 通过将输入作为参数传递给服务器端并返回匹配的标签并附加它来获取值
// variables
var input = document.querySelector('input');
var people = ['john doe', 'maria', 'paul', 'george', 'jimmy','Andrew','Hendrie'];
var results;
// functions
function autocomplete(val) {
var people_return = [];
for (i = 0; i < people.length; i++) {
if (val === people[i].slice(0, val.length)) {
people_return.push(people[i]);
}
}
return people_return;
}
// events
input.onkeyup = function(e) {
input_val = this.value; // updates the variable on each ocurrence
if (input_val.length > 0) {
var people_to_show = [];
autocomplete_results = document.getElementById("autocomplete-results");
autocomplete_results.innerHTML = '';
people_to_show = autocomplete(input_val);
for (i = 0; i < people_to_show.length; i++) {
autocomplete_results.innerHTML += '<li>' + people_to_show[i] + '</li>';
}
autocomplete_results.style.display = 'block';
} else {
people_to_show = [];
autocomplete_results.innerHTML = '';
}
}
ul{
padding:0;
margin:0;
}
li{
max-width:169px;
padding: 1px 0px;
list-style:none;
-webkit-appearance: textfield;
background-color: white;
border-image-source: initial;
border-image-slice: initial;
border-image-width: initial;
border-image-outset: initial;
border-image-repeat: initial;
-webkit-rtl-ordering: logical;
-webkit-user-select: text;
cursor: auto;
padding: 1px;
border-width: 2px;
border-style: inset;
border-color: initial
text-rendering: auto;
color: initial;
letter-spacing: normal;
word-spacing: normal;
text-transform: none;
text-indent: 0px;
text-shadow: none;
text-align: start;
margin: 0em 0em 0em 0em;
font: 13.3333px Arial;
}
<div id="autocomplete-container">
<input type="text" autofocus="true" name="autofocus sample" placeholder="search people" id="autocomplete-input"/>
<ul id="autocomplete-results">
</ul>
</div>
或
支持html5浏览器的最简单解决方案是数据列表
<input list="browsers">
<datalist id="browsers">
<option value="Internet Explorer">
<option value="Firefox">
<option value="Chrome">
<option value="Opera">
<option value="Safari">
</datalist>
http://www.w3schools.com/tags/tag_datalist.asp
编辑 1
添加导航我忘了更改有关导航的文本框更改将很快添加它
相关文章:
- 如何在Symfony2中的表单小部件中包含javascript
- 循环遍历包含另一个表单的表单
- HTML提交表单,同时包含空字段检查和按钮隐藏
- 需要一个用于AJAX的Javascript库,其中包含多部分/表单数据
- 包含特定条款的自动填写表单
- 从包含表单的对象中提取值
- 从包含ng的字段中获取表单数据,而无需使用ng模型
- 如何访问嵌套的表单ng包含范围/字段
- 有没有一种方法可以用包含ENTER键换行符的SQL数据填充文本区域表单
- 一个表单包含多个提交操作
- 将jQuery输入包含在表单帖子中
- 替换<标签>,包含的表单控件除外
- POST数据没有'不包含任何表单数据
- 在表单验证中包含验证码
- 使用ajax提交一个包含未知数量字段的html表单
- 谷歌表单:在文档的电子邮件中包含超链接'谷歌硬盘的位置
- 如果文本字段或本地存储包含数据,则自动提交表单
- 快速方法 Javascript/Jquery/etc 检索表单中包含的所有 aspnet:textbox (input)
- 使用 Ajax 发送的表单包含多参数和 A href
- 如果表单包含单词,则显示通知