wms-isearch.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /*
  2. * 描 述:learunISearch 输入搜索框,支持input输入框,数据异步加载,本地查询
  3. */
  4. (function ($, learun) {
  5. "use strict";
  6. $.lrisearch = {
  7. init: function ($self) {
  8. var dfop = $self[0]._lrisearch.dfop;
  9. $self.parent().append('<div class="lr-isearch-panel" style="max-height:' + dfop.maxHeight + 'px;" ><ul id="lrisearch_' + dfop.id + '" ></ul></div>');
  10. },
  11. bind: function ($self) {
  12. $self.on('input propertychange', function () {
  13. var $this = $(this);
  14. $.lrisearch.triggerSearch($self);
  15. });
  16. },
  17. triggerSearch: function ($self) {
  18. var dfop = $self[0]._lrisearch.dfop;
  19. var $showPanel = $('#lrisearch_' + dfop.id);
  20. $showPanel.parent().hide();
  21. var _value = $self.val();
  22. if (_value) {
  23. if (!dfop._isload) {
  24. dfop._isSearchneed = true;
  25. }
  26. else {
  27. dfop._first = true;
  28. dfop._value = _value;
  29. dfop._begin = 0;
  30. dfop._end = 100 > dfop.data.length ? dfop.data.length : 100;
  31. if (dfop._isSearched) {
  32. dfop._isSearched = false;
  33. setTimeout(function () {
  34. $.lrisearch.search($self);
  35. });
  36. }
  37. }
  38. }
  39. else {
  40. dfop._isSearchneed = false;
  41. $showPanel.html("");
  42. }
  43. },
  44. search: function ($self) {// 每次搜索100条
  45. var dfop = $self[0]._lrisearch.dfop;
  46. var value = dfop._value;
  47. var begin = dfop._begin;
  48. var end = dfop._end;
  49. var data = dfop.data;
  50. for (var i = begin; i < end; i++) {
  51. var _item = data[i];
  52. if (item[dfop.text].indexOf(value) != -1) {
  53. $.lrisearch.renderNone($self, item[dfop.text]);
  54. }
  55. }
  56. if (end < data.length) {
  57. dfop._begin = end;
  58. dfop._end = end + 100;
  59. if (dfop._end > data.length) {
  60. dfop._end = data.length;
  61. }
  62. setTimeout(function () {
  63. $.lrisearch.search($self);
  64. });
  65. }
  66. else {
  67. dfop._isSearched = true;
  68. }
  69. },
  70. renderNone: function ($self, text) {// 刷新一条数据
  71. var dfop = $self[0]._lrisearch.dfop;
  72. var $showPanel = $('#lrisearch_' + dfop.id);
  73. if (dfop._first) {
  74. dfop._first = false;
  75. $showPanel.html("");
  76. $showPanel.parent().show();
  77. }
  78. $showPanel.append('<li>' + text + '</li>');
  79. }
  80. };
  81. $.fn.lrisearch = function (op) {
  82. var dfop = {
  83. // 展开最大高度
  84. maxHeight: 200,
  85. // 字段
  86. text: "text",
  87. method: "GET",
  88. url: '',
  89. data: [],
  90. // 访问数据接口参数
  91. param: null,
  92. _isload: false,
  93. _isSearched: false,
  94. _first: false,
  95. _isSearchneed: false
  96. };
  97. $.extend(dfop, op || {});
  98. var $self = $(this);
  99. dfop.id = $self.attr('id');
  100. if (!dfop.id) {
  101. return false;
  102. }
  103. $self[0]._lrisearch = {dfop:dfop};
  104. $.lrisearch.init($self);
  105. //加载数据
  106. if (!!dfop.url) {
  107. learun.httpAsync(dfop.method, dfop.url, dfop.param, function (data) {
  108. $self[0]._lrisearch.dfop.data = data || [];
  109. dfop.isload = true;
  110. if (dfop._isSearchneed) {
  111. $.lrisearch.triggerSearch($self);// 触发查询函数
  112. }
  113. });
  114. }
  115. else {
  116. dfop.isload = true;
  117. }
  118. return $self;
  119. }
  120. })(jQuery, top.learun);