【问题标题】:Save and load checkboxes state to file保存并加载复选框状态到文件
【发布时间】:2018-11-02 13:04:19
【问题描述】:

我想将选中复选框的状态保存到一个文件(无论是文本文件还是其他文件),其中包含有关检查内容的信息。

我不能使用 localstorage 或 cookie,我需要将其保存为外部文件,以便我可以保存(和加载)多个选中不同复选标记的文件。

这很简单,但我找不到任何解决方案可以做到这一点,因此非常感谢任何帮助。

简单的sn-p供参考:

div {
    display: table;
}

span {
  display: block;
}

input,
label {
  display: inline-block;
}
<div>
  <span>
    <input id="box1" type="checkbox" />
    <label for="box1">Checkbox 1</label>
  </span>
  
  <span>
    <input id="box2" type="checkbox" checked/>
    <label for="box2">Checkbox 2</label>
  </span>
  
  <span>
    <input id="box3" type="checkbox" />
    <label for="box3">Checkbox 3</label>
  </span>
</div>
<button id="_save">Save</button>
<button id="_load">Load</button>

【问题讨论】:

  • 您的问题与 ajax 无关,您也缺少 javascript 标签。请向我们展示您尝试过的东西...
  • 感谢标签帮助,但我没有任何可行的尝试。我设法找到的只是本地存储的解决方案(实际上有几个),但没有关于外部保存/加载的内容。即使是一个简单的参考页面也会有很大的帮助。
  • 您的复选框是&lt;form&gt; 的一部分。单击保存按钮时,表单中所有&lt;input&gt; 字段的状态将发送到您定义为表单操作的页面。然后,您使用服务器端语言(例如 PHP 或 .NET)来读取这些状态并将信息保存到文件中。 PHP 的参考资料(因为这是我最了解的):w3schools.com/php/php_forms.aspw3schools.com/php/php_file.asp 让您入门,php.net 了解所有详细信息。
  • 感谢您的回复!我知道表单是这样工作的,但是您认为在提交之前有什么方法可以保存这些状态吗?
  • 如果您不想将数据保存到浏览器(例如使用本地存储),那么提交表单是保存信息行为的第一部分 - 您将数据发送到网络服务器,然后运行一些代码来接收数据并将其保存在某个地方(例如,在数据库或文件中,无论您需要什么)。您不能将它保存到运行浏览器的本地计算机上的文件中,如果这是您所要求的 - 浏览器被故意沙盒化以禁止这种事情,否则恶意网站可能会对用户的磁盘做不愉快的事情。

标签: javascript json file


【解决方案1】:

好的,我有一个可以满足我需要的解决方案。

因此,当您从表单中检查所需的所有内容时,您可以将其保存到 localstorage,然后您可以将 localstorage 导出为 JSON。我发现这个谷歌扩展处理本地存储的导入和导出(在文本文件中),但你总是可以加倍努力并为此编写自己的脚本。

这里是 JSFiddle 用于本地存储,因此可以保存您想要的任何输入,这里是处理导入和导出的 chrome 扩展 LocalStorage Manager

Javascript:

;(function($) {
    $.fn.toJSON = function() {
        var $elements = {};
        var $form = $(this);
        $form.find('input, select, textarea').each(function(){
          var name = $(this).attr('name')
          var type = $(this).attr('type')
          if(name){
            var $value;
            if(type == 'radio'){
              $value = $('input[name='+name+']:checked', $form).val()
            } else if(type == 'checkbox'){
              $value = $(this).is(':checked')
            } else {
              $value = $(this).val()
            }
            $elements[$(this).attr('name')] = $value
          }
        });
        return JSON.stringify( $elements )
    };
    $.fn.fromJSON = function(json_string) {
        var $form = $(this)
        var data = JSON.parse(json_string)
        $.each(data, function(key, value) {
          var $elem = $('[name="'+key+'"]', $form)
          var type = $elem.first().attr('type')
          if(type == 'radio'){
            $('[name="'+key+'"][value="'+value+'"]').prop('checked', true)
          } else if(type == 'checkbox' && (value == true || value == 'true')){
            $('[name="'+key+'"]').prop('checked', true)
          } else {
            $elem.val(value)
          }
        })
    };
}( jQuery ));

//
// DEMO CODE
// 
$(document).ready(function(){
   $("#_save").on('click', function(){
     console.log("Saving form data...")
     var data = $("form#myForm").toJSON()
     console.log(data);
     localStorage['form_data'] = data;

     return false;
   })

   $("#_load").on('click', function(){
     if(localStorage['form_data']){
       console.log("Loading form data...")
       console.log(JSON.parse(localStorage['form_data']))
       $("form#myForm").fromJSON(localStorage['form_data'])
     } else {
       console.log("Error: Save some data first")
     }

     return false;
   })
});

HTML:

<form action="#" method="get" id="myForm">

<input type="text" name="textfield">
Textfield
<br/>

<input type="number" name="numberfield" />
Numberfield
<br/>

<input type="radio" name="radiofield" value="1" />
<input type="radio" name="radiofield" value="2" />
<input type="radio" name="radiofield" value="3" />
Radiofields
<br/>

<input type="checkbox" name="checkfield">
<input type="checkbox" name="checkfield2">
<input type="checkbox" name="checkfield3">
Checkboxes
<br/>

<select name="selectbox">
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
</select>
Selectbox
<br/>

<textarea name="textarea"></textarea>
Textarea
<br/>

<hr/>
<button id="_save">Save</button>
<button id="_load">Load</button>
<input type="reset">

</form>

【讨论】:

  • 如果不是在本地管理器上,本地文件不是更好吗?这样还有便携性吗?
猜你喜欢
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 2015-03-09
  • 1970-01-01
  • 1970-01-01
  • 2021-03-01
  • 2012-04-18
相关资源
最近更新 更多