自动记忆监听记忆form元素的值, 再也不怕刷新页面啦

本工具自动监听记忆form表单元素的值, 不再怕刷新页面啦,

原理: 

1. 自动提取指定的form元素的唯一身份标志, 

        有id取id, 没有id 取class, 没有class取tagName, 默认向上取5层, 如果本页面内仍然有重复的则继续向上取, 最终还是有重复的标志, 则覆盖, 这种情况已经比较少见了; 

         其次, 不同页面间的元素的标志, 重复机率也大, 如果有重复, 基本可以认为是表达同一个意义的input, 可以共用记忆的内容

2. 内容是记忆在localStorage中的, 所以不能过分使用, 可以考虑分优先级存储, 本地存部分, 另一部分存服务器

依赖: 

jQuery

使用方法:

FormMem.listen('.myform :input');

 

FormMem源码如下:

 

  1. /**
  2. * 记忆指定的form元素的值, 包括input, select, textarea
  3. * @type type
  4. */
  5. var FormMem = {
  6. _cache: {},
  7. getName: function(ele) {
  8. var tag = ele, tagName, name = '', level = 10, id, clazz, cssArr;
  9. var idArr = [];
  10. while (tag) {
  11. tagName = tag.tagName.toLowerCase();
  12. id = tag.id;
  13. if (id) {
  14. idArr.push('#'+id);
  15. break;
  16. } else {
  17. clazz = tag.className;
  18. if (clazz) {
  19. cssArr = clazz.trim().replace(/\s+/g, ' ').split(' ');
  20. level -= cssArr.length;
  21. idArr.push(tag.tagName+'.' + cssArr.join('_'));
  22. } else {
  23. idArr.push( tag.tagName);
  24. }
  25. }
  26. tag = tag.parentElement;
  27. level--;
  28. if (level < 0) {
  29. break;
  30. }
  31. }
  32. name = idArr.join('<');
  33. console.info(name);
  34. this._cache[name] = 1;
  35. return name;
  36. },
  37. listen: function(selector) {
  38. $(selector).each(function() {
  39. var _name = FormMem.getName(this);
  40. var value = $(this).val();
  41. var value_db = localStorage.getItem(_name);
  42. if (value_db) {
  43. if (value_db != value) {
  44. $(this).val(value_db);
  45. }
  46. } else if (value) {
  47. localStorage.setItem(_name, value);
  48. }
  49. }).change(function() {
  50. var _name = FormMem.getName(this);
  51. var value = $(this).val();
  52. localStorage.setItem(_name, value);
  53. });
  54. }
  55. };