Topics

Google Form-aanpassing: bevestigingsscherm geïmplementeerd

  • column

In het vorige artikel, getiteld "Valkuilen bij het maken van uw formulieren met Google Form", hebben we de moeilijkheden samengevat die zich voordeden bij het maken van contactformulieren met HTML-aanpassingen in Google Form. Deze keer stellen we u de implementatie van het bevestigingsscherm voor.

In het vorige project hadden we

invoerscherm → verzendbevestigingsscherm → automatisch bevestigingsbericht

te implementeren.

Deze keer behandelen we

invoerscherm → bevestigingsscherm → verzendbevestigingsscherm → automatisch bevestigingsbericht

de implementatie van het bevestigingsscherm.

Conclusie: het is niet mogelijk om een "bevestigingspagina" in te voegen met alleen Google Form

Google Forms kan de inhoud van inzendingen niet vrij verwerken of omleidingen beheren met JavaScript (vanuit veiligheidsoogpunt heeft het formulier een structuur waarin JavaScript geen toegang heeft tot de inhoud).

Google Forms

  • kan geen tussentijdse bevestigingsscherm voor inzending implementeren.
  • Het is onmogelijk om gegevens die worden ingevoerd naar andere pagina's te verzenden of in HTML in te voegen.

Daarom is een aangepast HTML-formulier + GAS-webapplicatie essentieel.

Met een GAS-webapplicatie bouw je het formulier met HTML en GAS in plaats van Google Forms te gebruiken. Omdat ik een contactformulier wilde maken met Google Forms, besloot ik Gemini om advies te vragen.

Kan ik de gegevens die op een statische pagina (index.html) zijn ingevoerd, doorsturen naar een bevestigingspagina (confirm.html) en die gegevens vervolgens via aan Google Forms koppelen?

Dat is een scherp idee, maar helaas is deze benadering in principe "praktisch onmogelijk". Als je het per se wilt doen: ①index.html → Sla de waarden die in het formulier zijn ingevoerd op in sessionStorage met JavaScript. ②Lees de waarden uit sessionStorage in confirm.html en geef ze weer. ③POST naar Google Forms' formResponse met behulp van (aanpassen met entry.xxxxx) Let echter op: dit is een niet-officiële methode voor formResponse, en het werkt niet voor gebruikers met JavaScript uitgeschakeld, dus er zijn nadelen.

Geïmplementeerd met JavaScript!

Laten we nu de implementatiemethode met JavaScript doornemen.

index.html: invoerpagina maken

Eerst maken we een contactformulier op de invoerpagina. Op dit moment voeren we de entry.xxxx-waarde van Google Form nog niet in.

<form id="form">
  <input type="text" name="category" placeholder="お問い合わせ種類">
  <input type="text" name="name" placeholder="お名前">
  <input type="email" name="email" placeholder="メールアドレス">
  <button type="submit">確認</button>
</form>

<script>
  document.getElementById('form').addEventListener('submit', function (e) {
    e.preventDefault();
    const formData = new FormData(e.target);
    for (const [key, value] of formData.entries()) {
      sessionStorage.setItem(key, value); // sessionStorage に保存
    }
    window.location.href = '/inquiry/confirm.html';
  });
</script>

Wanneer de bevestigingsknop wordt ingedrukt, worden de in het formulier ingevoerde waarden opgeslagen in sessionStorage met JavaScript, en wordt naar de bevestigingspagina /inquiry/confirm.html overgeschakeld.

confirm.html: bevestigingspagina maken

De waarden die in sessionStorage zijn opgeslagen, worden in class="confirmBlock" ingevuld.

Voer vervolgens de entry.xxxxx-waarde van Google Form in het formulier eronder in.

<div class="confirmBlock">
  <p>お問い合わせ種類: <span id="category"></span></p>
  <p>お名前: <span id="name"></span></p>
  <p>メールアドレス: <span id="email"></span></p>
</div>

<form action="<https://docs.google.com/forms/d/e/1FAIpQLSc-.../formResponse>"
      method="POST" target="hidden_iframe" onsubmit="submitted = true;">
  <input type="hidden" name="entry.1234567890" id="categoryInput">
  <input type="hidden" name="entry.2345678901" id="nameInput">
  <input type="hidden" name="entry.3456789012" id="emailInput">
  <button type="submit">送信</button>
</form>

<iframe name="hidden_iframe" style="display:none;" onload="if(submitted) window.location='/inquiry/complete.html';"></iframe>

<script>
  // 表示とフォームへの挿入
  ['category', 'name', 'email'].forEach(key => {
    const value = sessionStorage.getItem(key);
    document.getElementById(key).textContent = value;
    document.getElementById(key + 'Input').value = value;
  });

  let submitted = false;
</script>

Waarom plaatsen we een invoerformulier op een bevestigingspagina…

Dat is omdat we de Google Form formResponse laten werken met dit formulier!

We verbergen het formulier zelf met type="hidden".

Dit is de werkelijke bevestigingspagina

Als je type="hidden" verwijdert, zal het aangepaste Google Form hier zichtbaar worden!

Wanneer op de verzendknop wordt geklikt

<iframe name="hidden_iframe" style="display:none;" onload="if(submitted) window.location='/inquiry/complete.html';"></iframe>

Het is prima als je naar de pagina voor de voltooiingsscherm complete.html navigeert!

Het proces werkt als volgt: de waarden die in index.html zijn ingevoerd, worden doorgegeven aan het Google Form op confirm.html en verzonden.

Omdat het een aangepast Google Form is, kun je ook het samenvattingsspreadsheet gebruiken en kunt verzendbevestigingse-mails via GAS automatisch versturen.

Samenvatting

Het "bevestigingsscherm" dat moeilijk te realiseren is met alleen Google Form, kan flexibel worden geïmplementeerd door JavaScript te gebruiken. ※Hoewel je moet zeggen dat de broncode volledig zichtbaar is 💦

Met wat kleine aanpassingen kun je het uiterlijk en gebruiksgemak aanzienlijk verbeteren. Waarom voeg je niet even wat extra moeite toe?

Auteur van dit artikel

Ik concentreer me op markup en ontwikkel frontends met JavaScript, React en Next.js. Het geeft me veel voldoening als een website waaraan ik heb gewerkt succesvol wordt gepubliceerd! Mijn hobby's zijn gitaar spelen. Ik ben dol op katten en zoete aardappelen🐱🍠

Hiracchi

Frontend-engineer / aangenomen in 2022

Artikelen van deze medewerker bekijken

Ons sterke punt is ons betrouwbare teamstructuur en snelle responsiviteit

Bij Liberogic worden ervaren teamleden actief ingezet voor projectvoering, wat door klanten zeer wordt gewaardeerd.
We wijzen vakbekwaam projectmanagers en directors aan en streven ernaar projecten soepel te laten verlopen. We voorkomen onnodig kostenverhogingen door volledig inzet te vermijden en wijzen middelen toe waar ze het meest geschikt zijn. Onze snelheid bij taakanalyse en bij het opmaken en indienen van offertes is goed bekend.

* Wij voeren niet actief SES-achtige permanente werkzaamheden uit, dus graag van tevoren dank voor uw begrip.

U kunt vrijwel alle grote projectmanagementtools en chattoolsgebruiken, zoals Slack, Teams, Redmine, Backlog, Asana, Jira, Notion, Google Workspace, Zoom en Webex.

Neem contact met ons op voor advies over uw webvragen.

Casestudies