2013-04-29 35 views
0

看起来好像一些文本输入立即给了我一个“下拉列表”,它带有我过去填写的值。其他时间没有。有没有办法我可以“鼓励”这种行为在输入框?为什么有时会发生这种情况,有时候不会呢我是否需要为重复用户提供cookie或其他设备以确保他们具有此功能,或者是否存在一些jquery选项? (因为我已经在使用它)。如何使文本输入始终自动完成

+0

你所看到的是一个浏览器功能。如果你想拥有自己的插件,请使用自动完成插件,例如[this one](http://jqueryui.com/autocomplete/)。 – 2013-04-29 17:25:20

+0

总猜测,但我认为大多数浏览器实际上使用“名称”或“ID”属性来自动完成用户输入。 – RelevantUsername 2013-04-29 17:27:25

+0

@RobertHarvey谢谢!我可以自己做一些类似于cookie的工作,但是有没有可用的插件,使用户特定的数据填充列表而不使用数据库? – 1252748 2013-04-29 17:28:10

回答

0

这是一个依赖于浏览器的功能。浏览器可能会查看文本输入字段的ID和/或名称并保存您输入的值。

由于您访问的网站上使用的输入字段的ID /名称,它可能是不透明的。

+0

看看我的JSBIN。为什么它会对我从amtrak.com网站上输入的内容起作用,但是对于我从amazon.com网站上输入的内容却不适用? http://jsbin.com/ekeyap/4/edit – 1252748 2013-05-13 23:35:52

0

浏览器根据输入类型和名称为您提供过去填充的值。

因此,当某人在examplea.com上编写一个名为“login”的输入的表单时,当您继续访问exampleb.com并且还有一个名为“login”的输入时,浏览器会检测到该输入并且您已经有一些info之前填入名为“login”的输入信息并显示一些选项。

这就是浏览器的行为。

对于jQuery的选项,你可以在http://jqueryui.com/autocomplete/

1

使用jQuery UI的自动完成这是一个想法。如果您想为页面上的每个输入字段具有特定的下拉值列表。然后用一个小小的javascript,google关闭编译器以及为浏览器创建收藏夹/书签的知识,您可以在任何网页上添加类似的东西。

这里是jsfiddle

HTML

<input type="text" /> 
<input type="text" /> 
<input type="text" /> 
<input type="text" list="sitelist" /> 
<datalist id="sitelist"> 
    <option label="Lorem" value="Lorem"> 
    <option label="Ipsum" value="Ipsum"> 
    <option label="Dolor" value="Dolor"> 
</datalist> 

我的示例代码的Javascript

(function() { 
    var d = "proin vestibulum ipsum vel tortor sollicitudin luctus".split(" "), 
     l = document.createElement("datalist"); 

    l.id = "myDynamicDatalist"; 
    d.forEach(function (w) { 
     var o = document.createElement("option"); 
     o.label = w; 
     o.value = w; 
     l.appendChild(o); 
    }); 

    document.body.appendChild(l); 

    Array.prototype.forEach.call(document.getElementsByTagName("input"), function (e) { 
     if (e.list === null || e.list === "") { 
      e.setAttribute("list", l.id); 
     } 
    }); 
}()); 

现在使用Google's closure compiler,你可以摆脱所有的空白,缩短东西单行通过将该选项设置为“简单”,然后以此结束。

(function(){var b=document.createElement("datalist");b.id="myDynamicDatalist";"proin vestibulum ipsum vel tortor sollicitudin luctus".split(" ").forEach(function(a){var c=document.createElement("option");c.label=a;c.value=a;b.appendChild(c)});document.body.appendChild(b);Array.prototype.forEach.call(document.getElementsByTagName("input"),function(a){(null===a.list||""===a.list)&&a.setAttribute("list",b.id)})})(); 

现在预先考虑到该行以javascript:并将其保存到收藏夹/书签和自己创建一个javascript bookmarklet

给它一个去。在SO上单击您最喜欢的/书签,然后双击搜索框,瞧!!

你甚至可以使用jquery创建bookmarklet,而j​​queryui意味着你可以使用自动完成功能。

+0

我真的不明白这是如何有用的。我必须“预设”一个待自动填充的单词列表? – 1252748 2013-05-13 23:42:36

+0

这是一个简单的例子,想想那个盒子的外面,更复杂的例子是代码也会监控页面上的输入,并存储你输入到localStorage的信息,然后当你再次访问该页面时,这是不跨域,它会使用保存的数据来提供自动完成器。是的,你必须自己编写一些代码,我没有看到任何东西,但它并不困难,然后你可以使用像我演示的或jquery自动完成或YUI自动完成之类的东西。这是您的问题的合理解决方案。 – Xotic750 2013-05-14 00:30:18

+0

嗯。也许我有点仓促。通过一点工作,它可能非常有用。有一个upvote!我的歉意!当我有一分钟时,我会深入研究它。谢谢 :) – 1252748 2013-05-14 02:56:14