Sync Webflow Input Fields in Real Time (No Code)

Intermediate 15:11 webflowfinsweetformsattributesno-code

Mirror one Webflow input into another in real time with Finsweet's Mirror Input — build live previews, personalized greetings, and duplicate fields, no code.

Key takeaways

  • Mirror Input pairs two fields: one is the trigger (what the user types into), the other is the target (what echoes it), and the value flows one way in real time.
  • To run several mirrors on one page you number the values — trigger-2/target-2, trigger-3/target-3 — because the suffix is the glue that links a target only to the trigger that shares its number.
  • A read-only display doesn't have to be a real form field: turn a Webflow custom element into one by setting its tag to input, adding type="text", and adding readonly, so people see the value but can't edit it.
  • It works with more than text inputs — text areas, selects, radio buttons, and checkboxes can all be mirrored, which is what makes patterns like "invoice same as shipping" possible.
  • Mirroring is a UX tool, not a default — use it only where it genuinely helps, and give linked fields identical labels so the connection is obvious and nobody gets lost.

Video chapters

  1. 00:00 Intro
  2. 00:52 "Input Mirror Values" by Finsweet
  3. 01:12 Use cases introduction
  4. 01:42 Use case #1 | Dynamic Personalized Greeting
  5. 05:31 Use case #2 | Real-Time Message Preview
  6. 09:57 Use case #3 | Duplicate Fields
  7. 13:40 Best practices
  8. 14:37 Outro

Build a Webflow form where one field mirrors into another in real time: type your name and watch it appear inside a greeting, see a message preview update as you write it, or have a shipping address copy itself into the invoice fields. You get all of it with Finsweet’s Mirror Input attribute — and not a single line of code.

The whole thing runs on one attribute with two roles. You mark the field people type into as the trigger, mark the field that should echo it as the target, and Finsweet keeps them in sync as the user types. It works with text inputs, text areas, selects, radio buttons, and checkboxes, so the same tiny setup covers everything from a personalized hello to a full duplicate-fields pattern in a checkout.

Best of all it’s genuinely fun to put together — and once you’ve wired one pair, you already know how to wire ten.

How it works

One attribute, two roles. Mirror Input works by pairing fields. On the field the user actually types into, you set fs-mirror-input-element to trigger; on the field that should echo it, you set the same attribute to target. That’s the entire relationship — as someone types in the trigger, the value is copied into the target in real time. There’s no script to configure and no IDs to wire up.

Numbering keeps pairs from colliding. The moment you want more than one mirror on a page, a plain trigger/target pair isn’t enough — every trigger would feed every target. So you number them: the first pair stays trigger/target, the next is trigger-2/target-2, then trigger-3/target-3, and so on. The suffix is the glue. A target only listens to the trigger that shares its number, so target-4 mirrors trigger-4 and nothing else. Match the numbers on both sides and everything just works.

Your target usually shouldn’t be a normal form field. In most of these use cases the target is a display — a greeting, a postcard preview — that you don’t want people editing. Dropping a real Webflow input there would be clunky, so instead you take a plain Webflow custom element and turn it into an input yourself: in the element settings, set the tag to input, add a type attribute of text, and add readonly (no value needed) so it shows the mirrored text but can’t be typed into. For a mirrored message you do the same but set the tag to textarea.

It’s not just text. Mirror Input handles text inputs, text areas, selects, radio buttons, and checkboxes — which is exactly what makes the duplicate-fields pattern work. The classic example is “invoice address same as shipping”: the shipping street and prefecture are triggers, the invoice street and prefecture are the matching targets, and the values copy across the moment they’re entered — while the user can still override the invoice side if the two addresses differ. One small polish worth knowing: in the greeting example, a space appears after “Hello” only once the name isn’t empty, which takes a tiny bit of custom code you’ll find inside the cloneable.

How to use it

  1. Clone the project. Grab the Webflow cloneable so you have the three worked examples — greeting, message preview, and duplicate fields — already set up to inspect.

  2. Set up the trigger. On the field people type into (a text input, text area, or select), open the element settings and add the attribute fs-mirror-input-element with a value of trigger.

  3. Build the target as a display. Add a Webflow custom element where the value should appear. In its settings, set the tag to input (or textarea for a message), add a type attribute of text, and add readonly so it can’t be edited. Then give it fs-mirror-input-element with a value of target.

  4. Match the pair. For a single mirror, trigger and target are enough. For more pairs on the same page, number them consistently — trigger-2 with target-2, trigger-3 with target-3 — making sure the number at the end of the trigger’s value matches the number on its target.

  5. Publish and test on the live link. Mirror Input runs on the published site, so hit Publish and open the live URL — as you type in a trigger, its target updates instantly.

  6. Use it with intention. Mirror only where it helps the user, and label linked fields identically (Street to Street, Prefecture to Prefecture) so the connection is clear and nobody loses track of what’s copied from where.

Configuration reference

Attribute Values Default What it does
fs-mirror-input-element trigger · target · trigger-2 · target-2 · trigger-3 · target-3 · trigger-4 · target-4 · trigger-5 · target-5 none Marks a field as a source (trigger) or a mirror (target). A trigger and its target link up by sharing the same value, so plain trigger + target is one pair; add a number suffix (trigger-2/target-2, trigger-3/target-3, …) to run several independent pairs on the same page.

Resources

Frequently asked questions

How do I sync two input fields in Webflow without code?
Use Finsweet's Mirror Input attribute. Add fs-mirror-input-element="trigger" to the field people type into and fs-mirror-input-element="target" to the field that should echo it — the value copies across live, no JavaScript required.
How do I mirror more than one pair of fields on the same page?
Number the values so each pair stays independent. Keep the first pair as trigger/target, then use trigger-2/target-2 for the second, trigger-3/target-3 for the third, and so on. A target only listens to the trigger that shares its exact number.
How do I show a mirrored value that the user cannot edit?
Make the display a Webflow custom element and, in its element settings, set the tag to input, add a type attribute of text, and add a readonly attribute with no value. It becomes a text field that shows the copied value but ignores typing.
Does Mirror Input work with dropdowns and checkboxes?
Yes. Beyond plain text inputs it supports text areas, select fields, radio buttons, and checkboxes — so you can mirror something like a country or prefecture dropdown, not just typed text.
When should I actually use mirrored inputs?
Only where it clearly improves the experience — a live preview, a friendly greeting, or copying a shipping address into invoice fields. Label the linked fields identically so the relationship is obvious, and always let users override a mirrored value when it might differ.

← Back to the course

Also part of these courses