RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1602935
Accepted
alexWithoutBeard
alexWithoutBeard
Asked:2024-12-20 19:52:28 +0000 UTC2024-12-20 19:52:28 +0000 UTC 2024-12-20 19:52:28 +0000 UTC

如何保存单选按钮、复选框、选择的状态

  • 772

有一个带有选择器、输入、单选、复选框等的表单。更新时需要保存数据(localstorage帮我)

但我有一个问题,需要对许多复选框、选择器等进行排序,例如,如何将此数据放入一个对象中?创建嵌套对象?

以下是我设法实现的)

let form = document.querySelector('form')
let input = document.querySelector('input')
let textarea = document.querySelector('textarea')
let checkbox = document.querySelector('input[type=checkbox]')
let radiobuttons = document.querySelectorAll('input[type=radio]:checked')

if (localStorage.getItem('param') !== null) {
  let param = JSON.parse(localStorage.getItem('param'));
  input.value = param.input
  textarea.value = param.textarea
  checkbox.checked = param.checkbox
}
document.addEventListener('input', function(e) {
  localStorage.setItem('param', JSON.stringify({input: input.value, textarea: textarea.value, checkbox: checkbox.checked}))
})
<form action="">
<input type="text"/>
<textarea name="t" id="text"></textarea>
<div class="form-check">
    <input class="form-check-input" type="checkbox" value="" id=""/>
    <label class="form-check-label" for=""> Default checkbox </label>
</div>
<div class="form-check">
    <input class="form-check-input" type="checkbox" value="" id=""/>
    <label class="form-check-label" for=""> Checked checkbox </label>
</div>
<div class="form-check">
    <input class="form-check-input" type="radio" name="" id=""/>
    <label class="form-check-label" for=""> Default radio </label>
</div>
<div class="form-check">
    <input
            class="form-check-input"
            type="radio"
            name=""
            id=""
    />
    <label class="form-check-label" for=""> Default radio </label>
    <div class="form-check">
        <input
                class="form-check-input"
                type="radio"
                name=""
                id=""
        />
        <label class="form-check-label" for=""> Default radio </label>
    </div>

    <select name="select" id="select">
        <option value="name1">name1</option>
        <option value="name2">name2</option>
        <option value="name3">name3</option>
    </select>
</div>
</form>

javascript
  • 1 1 个回答
  • 35 Views

1 个回答

  • Voted
  1. Best Answer
    SwaD
    2024-12-20T20:47:47Z2024-12-20T20:47:47Z

    用您的id标记所有表单元素,并用一些属性标记应该保存的表单元素(在我的示例中是data-save)

    该脚本的作用:

    选择表单元素 然后在表单内查找具有 属性的所有元素data-save。

    更改时,它会遍历所有选定的元素,并将它们的值保存到具有结构的对象中[id_элемента]: значение_элемента ,并将其保存在 localStorage 中。

    加载页面时,从 localStorage 获取数据并通过其 id 写入所选元素

    const form = document.querySelector('form')
    const saves = form.querySelectorAll('[data-save]');
    
    document.addEventListener('DOMContentLoaded', () => {
      const param = JSON.parse(localStorage.getItem('param') || '{}');
      saves.forEach(item => {
        if (item.type === 'radio' || item.type === 'checkbox') {
          item.checked = param[item.id] ?? false
        } else {
          item.value = param[item.id] ?? ''
        }
      });
    })
    
    document.addEventListener('input', function(e) {
      const param = {} 
      saves.forEach(item => {
        param[item.id] = (item.type === 'radio' || item.type === 'checkbox') ? item.checked : item.value;
      });
      localStorage.setItem('param', JSON.stringify(param));
    })
    <form action="">
      <input data-save type="text" id="inp1" /><br />
      <input data-save type="text" id="inp2" /><br />
      <textarea data-save name="t" id="text"></textarea><br />
      <textarea data-save name="t" id="text2"></textarea><br />
      <div class="form-check">
        <input data-save class="form-check-input" type="checkbox" value="0" id="inp3"/>
        <input data-save class="form-check-input" type="checkbox" value="1" id="inp4"/>
        <label class="form-check-label" for=""> Default checkbox </label>
      </div>
      <div class="form-check">
        <input data-save class="form-check-input" type="radio" value="0" id="inp5" name="r2" />
        <input data-save class="form-check-input" type="radio" value="1" id="inp6" name="r2" />
        <label class="form-check-label" for=""> Checked checkbox </label>
      </div>
    
      <select data-save name="select" id="select">
        <option value="name1">name1</option>
        <option value="name2">name2</option>
        <option value="name3">name3</option>
      </select>
    </form>

    单选框和复选框类型的输入没有值;它们有一个选中属性。

    PS:也许我错过了一些类型或元素,我认为纠正这个脚本以适应它们的功能并不困难

    • 3

相关问题

  • 第二个 Instagram 按钮的 CSS 属性

  • 由于模糊,内容不可见

  • 弹出队列。消息显示不正确

  • 是否可以在 for 循环中插入提示?

  • 如何将 JSON 请求中的信息输出到数据表 Vuetify vue.js?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5