html:加载formData以填充默认值

问题描述 投票:0回答:1

我有一个 HTML 表单:

    <form id="myForm" method="POST" action="/submit" target="response-frame">
        <div class="input">
            <label for="name">Full Name</label>
            <input id="name" name="name" type="text" value="x" />
        </div>

        <div class="input">
            <label for="email">Email Address</label>
            <input id="email" name="email" type="email" value="[email protected]" />
        </div>

        <button type="submit">Submit</button>
        <button type="loadValues" onclick="setFormValues()">Load Values</button>
    </form>

当我点击提交时,填写的值将以

formData
对象的形式发送 https://developer.mozilla.org/en-US/docs/Web/API/FormData

对于某些表单条目,我有默认/占位符值,例如对于电子邮件,我有默认值:

[email protected]
,当我提交表单时,此默认值包含在表单数据中。

我的问题是,有没有办法用现有的 formData 对象优雅地填充我的 HTML?

我知道我可以使用填充表单的脚本,就像我在这里已经在某种程度上所做的那样:

<script>
        function setFormValues() {
            const urlParams = new URLSearchParams(window.location.search);
            const key = urlParams.get("key");
            if (key) {
                document.getElementById("name").value = key;
            }
        }

        window.onload = setFormValues;
    </script>

但是我的表单将有 15 个左右的字段,手动设置这些字段似乎很乏味,而且通过循环设置它们似乎不太优雅。

理想情况下,我只想“加载现有的 formData 对象”,它会自动放置所有默认值/占位符。然后,用户可以根据自己的喜好修改字段,当他们单击发送时,修改后的 formData 将发送到目的地。

我的完整代码在这里:https://github.com/charelF/wg-form-page/blob/main/public/form.html

javascript html form-data
1个回答
0
投票

您可以使用

Object.entries()
Array::forEach()
:

const obj = {name: 'Alexander Nenashev', email: '[email protected]'};

Object.entries(obj).forEach(([name, value]) => 
  Object.assign(document.querySelector(`form [name="${ CSS.escape(name) }"]`), {value}));
    <form id="myForm" method="POST" action="/submit" target="response-frame">
        <div class="input">
            <label for="name">Full Name</label>
            <input id="name" name="name" type="text" value="x" />
        </div>

        <div class="input">
            <label for="email">Email Address</label>
            <input id="email" name="email" type="email" value="[email protected]" />
        </div>

        <button type="submit">Submit</button>
        <button type="loadValues" onclick="setFormValues()">Load Values</button>
    </form>

© www.soinside.com 2019 - 2024. All rights reserved.