表单自动完成字段填充不正确

Posted

技术标签:

【中文标题】表单自动完成字段填充不正确【英文标题】:Form autocomplete fields populating incorrectly 【发布时间】:2017-04-28 12:09:00 【问题描述】:

我为正在开发的网站创建了一个表单,如下所示:

<div class="container contacts__container--02">
    <? echo $this->Form->create('Email',array('class'=>'contact-form form','url'=>'/sendemail'));?>
    <form class="contact-form form contacts__form--02">
      <div class="contacts__form__inputs_box--02">
        <div class="row">
          <div class="col-md-2">
          </div>
          <div class="col-md-4 contact_item">
            <input
              type="text"
              placeholder="Your name"
              value=""
              name="data[Email][fullname]"
              class="input input--cloud-border input--white"
              minlength="3"
              required
            >
          </div>
          <div class="col-md-4 contact_item">
            <input
              type="text"
              required placeholder="Your business"
              value="" name="data[Email][business]"
              class="input input--cloud-border input--white"
            >
          </div>
        </div>
        <div class="row">
          <div class="col-md-2">
          </div>
          <div class="col-md-4 contact_item">
            <input
              type="email"
              required placeholder="Your email"
              value=""
              name="data[Email][email]"
              class="input input--cloud-border input--white"
              required
            >
          </div>
          <div class="col-md-4 contact_item">
            <input
              type="text"
              placeholder="Your phone"
              value=""
              name="data[Email][phone]"
              class="input input--cloud-border input--white"
            >
          </div>
        </div>
        <div class="row">
          <div class="col-md-2">
          </div>
          <div class="col-md-4 contact_item">
            <input
              type="email"
              required placeholder="Your website"
              value="" name="data[Email][website]"
              class="input input--cloud-border input--white"
            >
          </div>
          <div class="col-md-4 contact_item">
            <input
            type="text"
            placeholder="How did you hear about us?"
            value="" name="data[Email][referer]"
            class="input input--cloud-border input--white"
          >
          </div>
        </div>
        <div class="row">
          <div class="col-md-2">
          </div>
          <div class="col-md-8 contact_item">
            <textarea
              required placeholder="Your message"
              value="" name="data[Email][message]"
              class="contacts__form_textarea--02 input input--cloud-border input--white"
            ></textarea>
          </div>
        </div>
        <div class="row submit_row">
          <div class="col-md-2">
          </div>
          <div class="col-md-8 submit_button">
            <div class="g-recaptcha" data-sitekey="<?php echo $siteKey ?>"></div>
          </div>
        </div>
        <div class="row submit_row">
          <div class="col-md-2">
          </div>
          <div class="col-md-8 contact_item">
            <a id="sendForm" class="contacts__form_button--02 button button--yellow button--small-radius">send</a>
          </div>
        </div>
        <div class="row">
          <div class="col-md-2">
          </div>
          <div class="col-md-8 contact_item">
            <div id="response">
            </div>
          </div>
        </div>
      </form>
      <? echo $this->Form->end(); ?>
    </div>
 </div>

但由于某种原因,当我去填写表格时,除了电话号码之外的所有字段都填入了我的电子邮件地址:

如何设置应使用的自动完成字段?

【问题讨论】:

您是否使用 chrome 并为您的表单保存了值 - 有时在填写字段时很垃圾 - 这取决于您如何称呼它们,因为它会查找标准字段名称并且您似乎有 @987654324 @ 作为你所有的名字,它会将它们填写为电子邮件,因为它必须对输入名称中的电子邮件进行某种模式匹配。一个问题是您为什么要调用您的数组电子邮件,为什么不将其称为详细信息或更通用的名称? 您要禁用自动完成功能吗? 【参考方案1】:

它将“电子邮件”解释为字段名称而不是表单数组。更改为“ContactForm”,现在可以正常工作了:

<? echo $this->Form->create('ContactForm',array('class'=>'contact-form form','url'=>'/sendemail'));?>
    <form class="contact-form form contacts__form--02">
      <div class="contacts__form__inputs_box--02">
        <div class="row">
          <div class="col-md-2">
          </div>
          <div class="col-md-4 contact_item">
            <input
              type="text"
              placeholder="Your name"
              value=""
              name="data[ContactForm][fullname]"
              class="input input--cloud-border input--white"
              minlength="3"
              required
            >
          </div>
          <div class="col-md-4 contact_item">
            <input type="text" required placeholder="Your business" value="" name="data[ContactForm][business]" class="input input--cloud-border input--white">
          </div>
        </div>
        <div class="row">
          <div class="col-md-2">
          </div>
          <div class="col-md-4 contact_item">
            <input type="email" required placeholder="Your email" value="" name="data[ContactForm][email]" class="input input--cloud-border input--white">
          </div>
          <div class="col-md-4 contact_item">
            <input type="text" placeholder="Your phone" value="" name="data[ContactForm][phone]" class="input input--cloud-border input--white">
          </div>
        </div>
        <div class="row">
          <div class="col-md-2">
          </div>
          <div class="col-md-8 contact_item">
            <textarea required placeholder="Your message" value="" name="data[ContactForm][message]" class="contacts__form_textarea--02 input input--cloud-border input--white"></textarea>
          </div>
        </div>
        <div class="row submit_row">
          <div class="col-md-2">
          </div>
          <div class="col-md-8 submit_button">
            <div class="g-recaptcha" data-sitekey="<?php echo $siteKey ?>"></div>
          </div>
        </div>
        <div class="row submit_row">
          <div class="col-md-2">
          </div>
          <div class="col-md-8 contact_item">
            <a id="sendForm" class="contacts__form_button--02 button button--yellow button--small-radius">send</a>
          </div>
        </div>
        <div class="row">
          <div class="col-md-2">
          </div>
          <div class="col-md-8 contact_item">
            <div id="response">
            </div>
          </div>
        </div>
      </form>
      <? echo $this->Form->end(); ?>

【讨论】:

以上是关于表单自动完成字段填充不正确的主要内容,如果未能解决你的问题,请参考以下文章

使用自动完成填充表单时,Javascript 不启用按钮

禁用 Firefox 自动填充 html 表单但保持自动完成

如何防止浏览器列出输入字段的建议(不一定与禁用自动完成/自动填充相同)?

根据自动完成选择填写表单集的其他两个字段

有没有办法在用户键入时使用第一个 Google Location 返回值自动填充/文本完成表单字段?

jquery:预填充自动完成字段