【问题标题】:autocomplete attribute is not passing XHTML 1.0 Transitional validation, why?autocomplete 属性没有通过 XHTML 1.0 过渡验证,为什么?
【发布时间】:2011-01-31 18:17:44
【问题描述】:

我正在尝试清理我的 xhtml 验证——我正在通过 W3C 验证器运行我的页面。由于某些令人费解的原因,它没有传递带有 autocomplete="off" 属性的输入字段:

<input name="kwsearch" id="sli_search_1" type="text" autocomplete="off" onfocus="if(this.defaultValue==this.value) this.value='';"
            onblur="if(this.value=='')this.value=this.defaultValue;" class="searchbox" value="Search" />

我正在使用这个文档类型:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

这是验证错误:

第 410 行,第 81 列:没有属性“自动完成”

…li_search_1" type="text" autocomplete="off" onfocus="if(this.defaultValue==thi…

我认为这对 W3C 来说没问题——但是,也许它仍处于“提交”阶段? http://www.w3.org/Submission/web-forms2/#autocomplete

想法?

【问题讨论】:

    标签: html xhtml


    【解决方案1】:

    我刚刚遇到了浏览器和标准之间这种恼人的冲突。我最终通过在页面上运行 javascript 来解决它, 等待 window.onLoad$(document).ready(),将属性添加到类 no-browser-autocomplete 的所有元素。然后我通过我的应用程序删除了autocomplete="off" 并添加了这个类。

    显然这将在不运行 javascript 的浏览器环境中失败。

    我在页面上而不是在 dom 就绪块中执行此操作的原因是,如果您等待 dom 就绪,浏览器已经自动完成它,至少在 Firefox 中(我正在测试它)。

    所以,这是我在我的应用布局中包含的一个 javascript 文件的开头:

    //this needs to run BEFORE all of the loaded/ready events fire, that's why it's not in the dom.ready function
    $(".no-browser-autocomplete").attr("autocomplete", "off");
    
    $(function(){ 
      //dom ready
    });
    

    【讨论】:

      【解决方案2】:

      如果您需要自动完成(浏览器确实支持它),那么请尝试扩展您的文档类型,例如下面的 XHTML 1.1:

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" [ <!ATTLIST form autocomplete (on|off) #IMPLIED> ]>

      【讨论】:

        【解决方案3】:

        Web 表单规范与 HTML 4 / XHTML 无关。可悲的是,autocomplete 不会通过验证。

        我认为在关闭自动完成的情况下实现有效的 HTML 4 /XHTML 的唯一方法是使用 JavaScript 在页面加载时添加属性。糟透了,我知道 - 但我认为这是唯一的方法。

        【讨论】:

        • 页面加载是否足够早,以至于浏览器还没有填写表单?我记得看过一篇动态添加autocomplete的文章,可惜我不记得结论是什么了。
        • @Boldewyn 该死的好问题!共识似乎是onDOMLoad,至少根据这个:avatraxiom.livejournal.com/97999.html
        【解决方案4】:

        autocomplete 是一个HTML5 attribute,所以如果需要,请使用 HTML5 文档类型声明。

        【讨论】:

        • 是的,Web Forms 2.0 已被纳入 HTML5!
        • 或者如果您以application/xhtml+xml (XHTML5) 发送,则根本不需要文档类型!
        【解决方案5】:

        那个 W3C 链接是针对 web 表单的东西,而不是核心 XHTML。可能会为 Web 表单引入额外的 DTD 并让页面进行验证。

        【讨论】:

          猜你喜欢
          • 2012-05-26
          • 2016-09-11
          • 1970-01-01
          • 2011-12-15
          • 2010-09-20
          • 1970-01-01
          • 2011-05-08
          • 1970-01-01
          • 2013-08-07
          相关资源
          最近更新 更多