【问题标题】:How to get browsers to selectively ignore HTML5 required attribute on forms如何让浏览器选择性地忽略表单上的 HTML5 必需属性
【发布时间】:2011-05-19 09:12:35
【问题描述】:

我有一个标准的 HTML 表单,它使用 fieldset 元素分为两个部分。一部分是输入姓名、电子邮件地址等,第二部分是输入地址自动完成功能的邮政编码(第二部分中的邮政编码查找字段没有必填属性)。

每个部分都有自己的提交按钮。第一部分中的每个字段都有一个带有 HTML5 必需属性的表单字段。

我的问题是,当用户在邮政编码查找字段中输入他们的邮政编码而不在第一部分输入任何内容时,表单中的所有字段都会在不支持此属性的浏览器中提交(例如 Firefox 3.6)。在 Firefox 4 中(例如),它尊重 required 属性,如果有带有 required 属性的空字段,它会阻止提交表单。但是,这破坏了我对表单的错误检查和验证的实现(服务器端,在 PHP 中)。

那么,当第二部分的提交按钮被按下时,有没有办法告诉浏览器(在这种情况下)忽略第一部分的“必需”属性?

我知道这可能与 required 属性的观点相悖,但我已经构建了表单,因此它不必按特定顺序完成,即用户可以选择在之前完成邮政编码查找字段输入他们的个人详细信息,但 required 属性当前会强制用户以某种方式完成表单,而无需这样做。

此外,任何解决方案都必须能够在没有 JavaScript 的情况下运行。请不要提及任何主张用 Ajax 替换邮政编码查找部分的答案,我已决定这是不允许的选项。

【问题讨论】:

    标签: forms html required


    【解决方案1】:

    我想我看到了你的问题。我不相信 HTML 中有任何东西可以让你指定这个更复杂的验证规则。我认为您必须:

    1. 在页面上将这些字段集拆分为两个单独的表单;

    2. 在两个不同的页面上使用两个单独的表单;或

    3. 重写您的服务器端代码,以便非邮政编码表单字段仅在用户提交邮政编码时包含required 属性。

    【讨论】:

    • 1.我已经避免了这种情况,因为如果用户在单独的“个人详细信息”表单中输入他们的详细信息后提交邮政编码表单,这些详细信息将会丢失(不会发布并且不会以其他方式捕获),这对用户来说非常烦人。跨度>
    • 2.我认为这可能是“最好的”无 js 解决方案。
    • 3.不确定这将如何工作 - 您是否建议仅在提交邮政编码表单后添加所需的属性?这是一个好主意,但是如果不使用 JavaScript 重写 DOM,它会如何工作呢?
    • @sfrost2004:我支持 1。关于 3.,这个想法是,当服务器最初为用户提供表单时,它不包含任何 required 属性邮政编码字段以外的字段。如果用户提交的表单只填写了邮政编码字段,那么服务器会将相同的表单返回给用户,并在那里选择地址,但这一次,它将required 属性添加到非地址字段。
    【解决方案2】:

    您的页面中是否有任何嵌套表单?第一个表单标签在嵌套表单中不起作用,如下所示。在这种情况下,使用空表单标签来避免错误。并且不要编写带有表单标签的类,例如 form.filed{}

    <form>
    main form
    <form> </form>
    <form> form1 </form>
    <form> form2 </form>
    
    </form>
    

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 2015-03-26
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      • 2019-09-04
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多