在表单提交上保留动态提交的 select 选项

Retain dynamically submitted select options on form submit

我有一个 html 表单,其中包含动态填充的 select:

    <form action="/" method="post" onsubmit="beforeSubmit()" id="crypto_form">
        <textarea name="message" id="textarea_message" oninput="this.value.toUpperCase()" cols="60" rows="5" placeholder="Enter Message"></textarea>
        <select form="crypto_form" name="keydata" id="select_keydata"></select>
        <button type="submit" name="type" id="btn_encrypt" value="encrypt">Encrypt</button>
        <button type="submit" name="type" id="btn_decrypt" value="decrypt">Decrypt</button>
    </form>

问题是当我提交表单时,所有 select 值都消失了。提交表格时如何保留它们?我查看了与此类似的问题,但其中 none 解决了我的特殊情况。

我认为发生的情况是页面正在重新加载,这就是选项消失的原因。

我使用 golang 作为 net/http 的后端。虽然,我认为它在这里没有太多链接,但如果它有助于解决问题,请告诉我。

注:beforeSubmit()函数为空。我可以放什么来保留选项?

您应该替换此代码:

type="submit"

type="button"

 <button type="button" name="type" id="btn_encrypt" value="encrypt">Encrypt</button>
 <button type="button" name="type" id="btn_decrypt" value="decrypt">Decrypt</button>

好吧,如果网站正在刷新,您可以使用 localStoragesessionStorage 以便在浏览器中保存您的数据。

推荐使用ES6 Maps存储<option>值。然后可以将地图转换为 JSON 字符串并存储在您的 localStorage/sessionStorage.

这是向地图添加 <option> 文本和值的片段:

map.set(option.text, option.value)

因此您的 beforeSubmit() 函数将如下所示:

function beforeSubmit() {
    sessionStorage.myMap = JSON.stringify(Array.from(map));
};

当你想要检索数据时,比如说,在 window.onload 中,你可以按如下方式进行:

var map;

window.onload = function() {
    if (sessionStorage.myMap != null) {
        map = new Map(JSON.parse(sessionStorage.myMap));
    } else {
        map = new Map();
    }
};