Warning:
This wiki has been archived and is now read-only.

HTML5/states-of-the-type-attribute

From HTML5 Chinese Interest Group Wiki
Jump to: navigation, search
type属性的状态
隐藏状态

input元素的type属性为隐藏状态,则应用本节中的规则。

input元素表示不准备进行检查或由用户操作的值。

约束验证:如果一个input元素的type属性为隐藏状态,则禁止约束验证

如果存在name属性且其值为一个区分大小写地匹配字符串“_charset_”,则元素的value属性必须被忽略。

文本状态和搜索状态

input元素的type属性为文本状态或搜索状态,则应用本节中的规则。

input元素表示一行当前元素的的纯文本编辑控件。

注:文本状态与搜索状态之间的区别主要在于风格:在搜索控件不同于普通文本字段的平台上,搜索状态的外观相较与一个普通文本字段更像是平台的搜索字段。

如果当前元素是可变的,其应该被用户编辑。用户代理禁止用户在元素的中插入U+000A换行(LF)或U+000D回车(CR)字符。

如果当前元素是可变的,用户代理应该允许用户更改该元素的书写方向,可以将其设为从左向右书写或从右向左书写。如果用户这样做,则用户代理必须执行下列步骤:

  1. 如果用户选择从左向右书写,则设置元素的dir属性为“ltr”,如果用户选择从右向左书写,则设为“rtl”。
  2. 向队列中加入一个任务触发一个简单事件——以冒泡法触发input元素的input事件。

如果标记了value属性,则其值禁止包含U+000A换行(LF)和U+000D回车(CR)字符。

值处理算法如下:从除去换行符

电话号码状态

input元素的type属性为电话号码状态,则应用本节中的规则。

input元素表示一行当前元素的所给出的的电话号码编辑控件。

如果当前元素是可变的,其应该被用户编辑。用户代理可能会修改用户输入的的间距和标点。用户代理禁止用户在元素的中插入U+000A换行(LF)或U+000D回车(CR)字符。

如果标记了value属性,则其值禁止包含U+000A换行(LF)和U+000D回车(CR)字符。

值处理算法如下:从除去换行符

注:与URL电子邮箱类型不同,电话号码类型不强制要求特定的语法。这是故意设置的;在实践中,电话号码字段往往是自由格式的字段,因为存在多种有效电话号码形式。对于需要强制限制某种特殊格式的系统,我们鼓励其使用pattern属性或setCustomValidity()方法,以将其挂接至客户端的验证机制。
URL状态

input元素的type属性为URL状态,则应用本节中的规则。

input元素表示一行当前元素的所给出的的绝对URL编辑控件。

如果当前元素是可变的,其用户代理应该允许用户修改其所表示的URL。用户代理可以允许用户将其设置为一个并非有效地绝对URL的字符串,但还可以自动地转义用户输入的字符使其总是有效地绝对URL(即使其不是用户在界面上看到和编辑的实际值)。用户代理应该允许用户将其设为空字符串。用户代理禁止用户在元素的中插入U+000A换行(LF)或U+000D回车(CR)字符。

如果标记了value属性,且其值不为空,则其值必须是一个可以由空格包围的有效URL且是一个绝对URL

值处理算法如下:从除去换行符,之后从除去首尾的空白字符

约束验证:若当前元素的既不是空字符串也不是一个有效地绝对URL,则该元素是出现类型不匹配

如果一个稳定包含下列标记:

<input type="url" name="location" list="urls">
<datalist id="urls">
 <option label="MIME: Format of Internet Message Bodies" value="http://tools.ietf.org/html/rfc2045">
 <option label="HTML 4.01 Specification" value="http://www.w3.org/TR/html4/">
 <option label="Form Controls" value="http://www.w3.org/TR/xforms/slice8.html#ui-commonelems-hint">
 <option label="Scalable Vector Graphics (SVG) 1.1 Specification" value="http://www.w3.org/TR/SVG/">
 <option label="Feature Sets - SVG 1.1 - 20030114" value="http://www.w3.org/TR/SVG/feature.html">
 <option label="The Single UNIX Specification, Version 3" value="http://www.unix-systems.org/version3/">
</datalist>

……且用户输入“www.w3”,而且用户代理发现用户近期曾经访问过http://www.w3.org/Consortium/#membership和http://www.w3.org/TR/XForms/,则可能按照下列方式进行渲染:

sample-url.png

在这个例子中,前四个URL由在编码人员指定的列表中匹配用户输入的文本所发现的四个URL组成,其按照用户代理定义的机制进行排序(可能是按照用户选择这些URL的频率)。注意用户代理时如何使用URL技术允许用户省略协议部分并且对域名进行智能匹配。

最后两个URL(可能还有更多,给出滚动条以便选择更多的值)是在用户代理的会话历史数据中进行匹配的结果。这些数据不允许页面DOM使用。在这个特例中,用户代理没有为这些值提供标题。

电子邮件状态

input元素的type属性为电子邮件状态,则应用本节中的规则。

电子邮件状态的操作取决于是否标记了multiple属性。

  • 若当前元素没有标记multiple属性
    • input元素表示一行当前元素的所给出的的电子邮件地址编辑控件。
    • 如果当前元素是可变的,则用户代理应该允许用户修改其所表示的电子邮件地址。用户代理可以允许用户将其设置为一个并非有效地电子邮件地址的字符串。用户代理应该以预期用户将提供一个单一的电子邮件地址来采取一些措施。用户代理应该允许用户将其设为空字符串。用户代理禁止用户在元素的中插入U+000A换行(LF)或U+000D回车(CR)字符。用户代理可以为了显示和编辑对其进行转换;特别是用户代理应该在进行显示时将其中的punycode转换为IDN,反之亦然。
    • 如果标记了value属性,且其值不为空,则其值必须是一个表示单一的有效地电子邮件地址的值。
    • 值处理算法如下:从除去换行符
    • 若移除了multiple属性,则用户代理必须执行值处理算法
    • 约束验证:若当前元素的既不是空字符串也不是一个有效地电子邮件地址,则该元素出现类型不匹配
  • 若当前元素标记了multiple属性

有效地电子邮件地址是一个匹配ABNF “1*( atext / "." ) "@" ldh-str *( "." ldh-str )”的字符串,其中“atext”定义自RFC 5322的3.2.3节、“ldh-str”定义自RFC 1034的3.5节。[ABNF] [RFC5322] [RFC1034]

注:该需求故意违反RFC 5322,其定义的电子邮件地址语法同时存在过于严格(“@”字符之前)、过于含糊(“@”字符之后)和过于松懈(允许注释、空白字符和被引号包围的字符这些大多数用户不熟悉的方式)的问题。

有效地电子邮件地址列表一组由逗号分隔的标记,其每个标记本身是一个有效地电子邮件地址。为了获取有效地电子邮件地址列表中标记的列表,实现必须按照逗号分隔字符串

密码状态

input元素的type属性为密码状态,则应用本节中的规则。

input元素表示一行当前元素的所给出的的纯文本编辑控件。用户代理应该隐藏其值,使除用户之外的人不能看到它。

如果当前元素是可变的,其应该可以被用户修改。用户代理禁止用户在元素的中插入U+000A换行(LF)或U+000D回车(CR)字符。

如果标记了value属性,则其值必须不包含U+000A换行(LF)和U+000D回车(CR)字符。

值处理算法如下:从除去换行符

日期和时间状态

input元素的type属性为日期和时间状态,则应用本节中的规则。

input元素表示一行将当前元素的设置为一个表示特定全球日期和时间的字符串。用户代理可能会以任何对用户来说适当的时区来显示日期和时间。

如果当前元素是可变的,用户代理应该允许用户修改其所表示的全球日期和时间全球日期和时间通过对其解析一个全球日期和时间获得。用户代理禁止用户将其设为非空且非UTC下表示有效地全球日期和时间字符串的字符串,但用户代理可能会允许用户在其它时区下进行设置和查看并在后台对其中的时间进行与UTC时区之间的相互转换。如果用户代理提供了一个用于选择全球日期和时间的用户界面,则其必须被设为一个表示用户所选择的用UTC表示的有效地全球日期和时间字符串。用户代理应该允许用户将其设为空字符串。

注:向用户展示的格式取决于用于表单提交的格式。我们鼓励浏览器使用根据用户首选区域公约提供日期和时间的用户界面。

如果标记了value属性,且其值不为空,则其值必须是一个有效地全球日期和时间字符串

值处理算法如下:如果其是一个有效地全球日期和时间字符串,则将该时间调整为UTC时区下表示相同时刻的,否则设其为空字符串。

如果标记了min属性,则其值必须是一个有效地全球日期和时间字符串。如果标记了max属性,则其值必须是一个有效地全球日期和时间字符串

step属性用秒来表示。步长因子是1000(将秒转换成毫秒,用于其他算法)。默认步长为60秒。

若元素出现步长不匹配,则用户代理可能会将当前元素的四舍五入到最近的不会是该元素出现步长不匹配全球日期和时间

将字符串转换为数值的算法如下:如果从input解析一个全球日期和时间出现错误,则返回一个错误;否则,返回从UTC时区下1970-01-01凌晨零点(该时间通过值“1970-01-01T00:00:00.0Z”表示)到解析后的全球日期和时间的毫秒数,忽略闰秒。

将数值换为字符串转的算法如下:返回一个UTC表示的有效地全球日期和时间字符串,该字符串表示UTC时区下1970-01-01凌晨零点(该时间通过值“1970-01-01T00:00:00.0Z”表示)之后input毫秒的全球日期和时间

将字符串转换为Date对象的算法如下:如果从input解析一个全球日期和时间出现错误,则返回一个错误;否则,返回一个表示解析后的全球日期和时间的Date对象,使用UTC表示。

将Date对象转换为字符串的算法如下:返回一个UTC表示的有效地全球日期和时间字符串,该字符串表示input表示的全球日期和时间

下列片段展示了一个日历应用的一部分。用户可以指定一个会议的日期和时间(使用其所在时区,但用户代理可以允许用户修改所在时区),由于提交的数据包含时区偏移量,则无论与会者在哪个时区,应用程序都可以确定该会议召开的准确时间。

<fieldset>
 <legend>新增会议</legend>
 <p><label>会议名称:<input type=text name="meeting.label"></label>
 <p><label>会议时间:<input type=datetime name="meeting.start"></label>
</fieldset>

如果应用使用了本地日期和时间类型,则日历应用还需要显式地确认用户所使用的时期。

日期状态

input元素的type属性为日期状态,则应用本节中的规则。

input元素表示一行将当前元素的设置为一个表示特定日期的字符串。

如果当前元素是可变的,用户代理应该允许用户修改其所表示的日期日期通过对其解析一个日期获得。用户代理禁止用户将其设为非空且非有效地日期字符串的字符串。如果用户代理提供了一个用于选择日期的用户界面,则其必须被设为一个表示用户所选择的有效地日期字符串。用户代理应该允许用户将其设为空字符串。

注:向用户展示的格式取决于用于表单提交的格式。我们鼓励浏览器使用根据用户首选区域公约提供日期和时间的用户界面。

如果标记了value属性,且其值不为空,则其值必须是一个有效地日期字符串

值处理算法如下:如果其不是一个有效地日期字符串,则设其为空字符串。

如果标记了min属性,则其值必须是一个有效地日期字符串。如果标记了max属性,则其值必须是一个有效地日期字符串

step属性用天来表示。步长因子是86,400,000(将天转换成毫秒,用于其他算法)。默认步长为1天。

若元素出现步长不匹配,则用户代理可能会将当前元素的四舍五入到最近的不会使该元素出现步长不匹配日期

将字符串转换为数值的算法如下:如果从input解析一个日期出现错误,则返回一个错误;否则,返回从UTC时区下1970-01-01凌晨零点(该时间通过值“1970-01-01T00:00:00.0Z”表示)到解析后的日期在UTC时区下凌晨零点的毫秒数,忽略闰秒。

将数值换为字符串转的算法如下:返回一个UTC表示的有效地日期字符串,该字符串表示UTC时区下1970-01-01凌晨零点(该时间通过值“1970-01-01T00:00:00.0Z”表示)之后input毫秒的日期

将字符串转换为Date对象的算法如下:如果从input解析一个日期出现错误,则返回一个错误;否则,返回一个表示解析后的日期在UTC凌晨零点的Date对象。

将Date对象转换为字符串的算法如下:返回一个在UTC时区下input表示的日期在当前时间的有效地日期字符串

译:此处原文没有说明files IDL属性是否应该被应用于当前元素。

月份状态

input元素的type属性为月份状态,则应用本节中的规则。

input元素表示一行将当前元素的设置为一个表示特定月份的字符串。

如果当前元素是可变的,用户代理应该允许用户修改其所表示的月份月份通过对其解析一个月份获得。用户代理禁止用户将其设为非空且非有效地月份字符串的字符串。如果用户代理提供了一个用于选择月份的用户界面,则其必须被设为一个表示用户所选择的有效地月份字符串。用户代理应该允许用户将其设为空字符串。

注:向用户展示的格式取决于用于表单提交的格式。我们鼓励浏览器使用根据用户首选区域公约提供日期和时间的用户界面。

如果标记了value属性,且其值不为空,则其值必须是一个有效地月份字符串

值处理算法如下:如果其不是一个有效地月份字符串,则设其为空字符串。

如果标记了min属性,则其值必须是一个有效地月份字符串。如果标记了max属性,则其值必须是一个有效地月份字符串

step属性用月来表示。步长因子是1(没有转换的必要,其他算法会使用月为单位)。默认步长为1个月。

若元素出现步长不匹配,则用户代理可能会将当前元素的四舍五入到最近的不会使该元素出现步长不匹配月份

将字符串转换为数值的算法如下:如果从input解析一个月份出现错误,则返回一个错误;否则,返回从1970年一月到解析后的月份的月数。

将数值换为字符串转的算法如下:返回一个有效地月份字符串,该字符串表示1970年一月之后input个月的月份

将字符串转换为Date对象的算法如下:如果从input解析一个月份出现错误,则返回一个错误;否则,返回一个表示解析后的月份在UTC当月第一天凌晨零点的Date对象。

将Date对象转换为字符串的算法如下:返回一个在UTC时区下input表示的月份在当前时间的有效地月份字符串

周状态

input元素的type属性为状态,则应用本节中的规则。

input元素表示一行将当前元素的设置为一个表示特定的字符串。

如果当前元素是可变的,用户代理应该允许用户修改其所表示的通过对其解析一个周获得。用户代理禁止用户将其设为非空且非有效地周字符串的字符串。如果用户代理提供了一个用于选择的用户界面,则其必须被设为一个表示用户所选择的有效地周字符串。用户代理应该允许用户将其设为空字符串。

注:向用户展示的格式取决于用于表单提交的格式。我们鼓励浏览器使用根据用户首选区域公约提供日期和时间的用户界面。

如果标记了value属性,且其值不为空,则其值必须是一个有效地周字符串

值处理算法如下:如果其不是一个有效地周字符串,则设其为空字符串。

如果标记了min属性,则其值必须是一个有效地周字符串。如果标记了max属性,则其值必须是一个有效地周字符串

step属性用周来表示。步长因子是604,800,000(将周转换为毫秒,用于其他算法)。默认步长为1周。默认基础步长为-259,200,000(1970年第一周的开始)。

若元素出现步长不匹配,则用户代理可能会将当前元素的四舍五入到最近的不会使该元素出现步长不匹配的最近的

将字符串转换为数值的算法如下:如果从input解析一个周出现错误,则返回一个错误;否则,返回从UTC时区下1970-01-01凌晨零点(该时间通过值“1970-01-01T00:00:00.0Z”表示)到解析后的在UTC时区下凌晨零点的毫秒数,忽略闰秒。

将数值换为字符串转的算法如下:返回一个有效地周字符串,该字符串表示UTC时区下1970-01-01凌晨零点(该时间通过值“1970-01-01T00:00:00.0Z”表示)之后input毫秒的

将字符串转换为Date对象的算法如下:如果从input解析一个周出现错误,则返回一个错误;否则,返回一个表示解析后的在UTC时区下周一凌晨零点的Date对象。

将Date对象转换为字符串的算法如下:返回一个在UTC时区下input表示的在当前时间的有效地周字符串

时间状态

input元素的type属性为时间状态,则应用本节中的规则。

input元素表示一行将当前元素的设置为一个表示特定时间的字符串。

如果当前元素是可变的,用户代理应该允许用户修改其所表示的时间时间通过对其解析一个时间获得。用户代理禁止用户将其设为非空且非有效地时间字符串的字符串。如果用户代理提供了一个用于选择时间的用户界面,则其必须被设为一个表示用户所选择的有效地时间字符串。用户代理应该允许用户将其设为空字符串。

注:向用户展示的格式取决于用于表单提交的格式。我们鼓励浏览器使用根据用户首选区域公约提供日期和时间的用户界面。

如果标记了value属性,且其值不为空,则其值必须是一个有效地时间字符串

值处理算法如下:如果其不是一个有效地时间字符串,则设其为空字符串。

如果标记了min属性,则其值必须是一个有效地时间字符串。如果标记了max属性,则其值必须是一个有效地时间字符串

step属性用秒来表示。步长因子是1000(将秒转换为毫秒,用于其他算法)。默认步长为60秒。

若元素出现步长不匹配,则用户代理可能会将当前元素的四舍五入到最近的不会使该元素出现步长不匹配的最近的时间

将字符串转换为数值的算法如下:如果从input解析一个时间出现错误,则返回一个错误;否则,返回从当天凌晨零点到解析后的时间的毫秒数,且不存在时间变化。

将数值换为字符串转的算法如下:返回一个有效地时间字符串,该字符串表示当天凌晨零点之后input毫秒的时间

将字符串转换为Date对象的算法如下:如果从input解析一个时间出现错误,则返回一个错误;否则,返回一个表示解析后的时间在UTC时区下1970-01-01的Date对象。

将Date对象转换为字符串的算法如下:返回一个在UTC时区下input表示的时间部分的有效地时间字符串

本地日期和时间状态

input元素的type属性为本地日期和时间状态,则应用本节中的规则。

input元素表示一行将当前元素的设置为一个表示没有时区偏移信息的本地日期和时间的字符串。

如果当前元素是可变的,用户代理应该允许用户修改其所表示的日期和时间日期和时间通过对其解析一个日期和时间获得。用户代理禁止用户将其设为非空且非有效地本地日期和时间字符串的字符串。如果用户代理提供了一个用于选择本地日期和时间的用户界面,则其必须被设为一个表示用户所选择的有效地本地日期和时间字符串。用户代理应该允许用户将其设为空字符串。

注:向用户展示的格式取决于用于表单提交的格式。我们鼓励浏览器使用根据用户首选区域公约提供日期和时间的用户界面。

如果标记了value属性,且其值不为空,则其值必须是一个有效地本地日期和时间字符串

值处理算法如下:如果其不是一个有效地本地日期和时间字符串,则设其为空字符串。

如果标记了min属性,则其值必须是一个有效地本地日期和时间字符串。如果标记了max属性,则其值必须是一个有效地本地日期和时间字符串

step属性用秒来表示。步长因子是1000(将秒转换为毫秒,用于其他算法)。默认步长为60秒。

若元素出现步长不匹配,则用户代理可能会将当前元素的四舍五入到最近的不会使该元素出现步长不匹配的最近的本地日期和时间

将字符串转换为数值的算法如下:如果从input解析一个日期和时间出现错误,则返回一个错误;否则,返回从1970-01-01凌晨零点(该时间通过值“1970-01-01T00:00:00.0Z”表示)到解析后的本地日期和时间的毫秒数,忽略闰秒。

将数值换为字符串转的算法如下:返回一个有效地本地日期和时间字符串,该字符串表示1970-01-01凌晨零点(该时间通过值“1970-01-01T00:00:00.0Z”表示)之后input毫秒的日期和时间

下列例子展示了航班预订应用的一部分。该应用使用了一个type属性被设为datetime-localinput元素,并且在随后使用用户所选的机场所使用的时区解释给出的日期和时间。

<fieldset>
 <legend>目的地</legend>
 <p><label>机场:<input type=text name=to list=airports></label></p>
 <p><label>起飞时间:<input type=datetime-local name=totime step=3600></label></p>
</fieldset>
<datalist id=airports>
 <option value=ATL label="亚特兰大">
 <option value=MEM label="孟菲斯">
 <option value=LHR label="伦敦希思罗">
 <option value=LAX label="洛杉矶">
 <option value=FRA label="法兰克福">
</datalist>

如果该应用使用了datetime类型,则用户将不得不自行进行时区转换,这不利于优化用户体验。