HTML5中的input type="text"和input type="search"有何区别?

161

我刚接触HTML5并开始使用HTML5的新表单输入字段。当我使用表单输入字段,特别是<input type="text" /><input type="search" />时,我认为在所有主要浏览器中(包括Safari、Chrome、Firefox和Opera),它们都没有任何区别。搜索字段也像常规文本字段一样运作。

那么,在HTML5中,input type="text"input type="search"有什么区别呢?

<input type="search" />的真正目的是什么?


1
http://www.html5tutorial.info/html5-search.php - Marc B
10个回答

213

目前,它们之间并没有太大区别 - 也许永远不会有。 然而,关键是为浏览器制造商提供能够在需要时执行特殊操作的能力。

想一想,在手机上使用<input type="number">可以带出数字键盘,或者type="email"可以带出带有@和.com等符号的键盘。

在手机上,如果他们愿意,搜索可以带出一个内部搜索小应用程序。

另一方面,它有助于当前的CSS开发人员。

input[type=search]:after { content : url("magnifying-glass.gif"); }

16
对于两个有效的观点,我给出一加一赞成: 1)为手机开发内部搜索应用程序。 2)提高演示技能的能力。 不过,我想要等待接受答案,因为我想确认没有其他目的。 - Vijin Paulraj
现在还没有。 目前,所有输入都只是名称(例如input[type=color]只有部分支持),或者浏览器已经实现了它们自己的特殊处理方式(例如type=number、type=email或type=range)。没有其他选择——它要么被浏览器特殊处理,要么不会。目前,在大多数浏览器中,type=search没有特殊处理,也很可能不会有(除非可能使其看起来像iTunes或其他应用程序中的搜索框)。目前,它存在的原因是让您知道它是一个搜索框,以便您可以添加额外的功能/呈现方式。 - Norguard
47
不同之处在于,在搜索输入框中按 [Esc] 键将清除搜索结果。如果你的用户经常使用搜索功能,那么这个功能非常方便。 - vhs
@JoshH 那真是太方便了。你知道目前影响哪些浏览器(和版本)吗?考虑到现在的情况与一年半前大不相同,我完全愿意更新答案并将其提升到常青树的当前/未来状态。 - Norguard
3
我不建议在替换元素上使用伪元素:这违反了标准,尽管在某些情况下可以工作。 - Paul Kozlovitch
@PaulKozlovitch 除此之外,上次我检查过它不能与输入一起使用。 - Ced

36

如果输入类型是'search',则在视觉/功能上有2个区别:

  1. 您会在输入/搜索框的末尾获得一个'X'符号,以清除框中的文本
  2. 按键盘上的'Esc'键也可以清除文本

4
这绝对不是普遍现象。这种情况出现在哪种环境中? - Stéphane Gourichon
1
"X" 图标在 Edge 中可见。 - Rahul A Ranger
1
Edge和Chrome - GeorgeWL

32

在大多数浏览器中,它几乎什么也不做,只是像文本输入一样的表现。这并不是问题,规范也不要求它有任何特殊的功能。但 WebKit 浏览器处理它时可能会稍有不同,主要是在样式方面。

在 WebKit 中,默认情况下,搜索输入框具有内嵌边框、圆角和严格的排版控制。

另外,

我不知道有没有任何文档或规范记载,但如果在输入标签上添加一个results参数,WebKit 将会应用一个带有放大镜和下拉箭头显示先前结果的小部件。

<input type=search results=5 name=s>

参考

最重要的是,它为 input type 提供了语义化的含义。

更新:

Chrome 51 删除了对 results 属性的支持:


7
在某些浏览器上,它还支持“results”和“autosave”属性,提供了具有放大镜图标的自动“最近搜索”功能。

更多信息


2
Chrome 51移除了对results属性的支持:https://developers.google.com/web/updates/2016/08/chrome-53-deprecations#remove-results-attribute-for-input-typesearch - Flimm

2

当您在输入框中键入一些单词,然后在chrome / safari的中按ESC时,在操作方面会有浏览器差异,输入框将被清除。但在的情况下,单词不会被清除。因此,在选择类型时要特别小心,特别是在使用自动完成或搜索相关功能时。


2
实际上,对于它什么也不做这件事情要非常小心。当您尝试使用类型为search的输入框进行样式设置时,它们具有某些不能更改的属性。如果您尝试更改其中一个的边框,您会发现这几乎不可能。还有一些其他不允许使用的CSS属性,请查看此处获取完整详情。

另外,正如Jashwant所提到的那样,还有一个result属性,但是除非您还包括autosave属性,否则它的效果并不是很好。然而,在大多数浏览器中,下拉框都无法正常工作,因此请自行承担风险使用。


1

奖励点: input type="search" 具有使用 onsearch 属性的能力(尽管我注意到这在 Microsoft 的新 Edge 浏览器中不起作用),这消除了编写自定义 onkeypress=if(key=13) { function() } 的需要。


1
使用input type="search"可以使键盘的回车键显示“搜索”,这可能会提高用户体验。但是,如果使用此类型,则必须调整样式。

-1

这取决于程序员的观点,程序员可以通过查看类型轻松确定输入的目的,并且对于CSS样式和JavaScript或JQuery来验证输入中的规则也很容易。


-2

但是它会对您的输入元素产生不良影响,如果您设置了

<input type="search">

而在你的 CSS 中设置

input {background: url("images/search_bg.gif");}

它根本不会显示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接