You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

136 lines
4.2 KiB

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