common.js 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. // 验证
  2. $.minLength = function(value, length , isByte) {
  3. var strLength = $.trim(value).length;
  4. if(isByte)
  5. strLength = $.getStringLength(value);
  6. return strLength >= length;
  7. };
  8. $.maxLength = function(value, length , isByte) {
  9. var strLength = $.trim(value).length;
  10. if(isByte)
  11. strLength = $.getStringLength(value);
  12. return strLength <= length;
  13. };
  14. $.getStringLength=function(str)
  15. {
  16. str = $.trim(str);
  17. if(str=="")
  18. return 0;
  19. var length=0;
  20. for(var i=0;i <str.length;i++)
  21. {
  22. if(str.charCodeAt(i)>255)
  23. length+=2;
  24. else
  25. length++;
  26. }
  27. return length;
  28. };
  29. $.checkMobilePhone = function(value){
  30. if($.trim(value)!='')
  31. return /^\d{6,}$/i.test($.trim(value));
  32. else
  33. return true;
  34. };
  35. $.checkEmail = function(val){
  36. var reg = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
  37. return reg.test(val);
  38. };
  39. //判断是否为整数
  40. $.checkint=function isInteger(obj) {
  41. return obj%1 === 0
  42. };
  43. /**
  44. * 判断变量是否空值
  45. * undefined, null, '', false, 0, [], {} 均返回true,否则返回false
  46. */
  47. $.checkEmpty = function(val){
  48. switch (typeof val){
  49. case 'undefined' : return true;
  50. case 'string' : if($.trim(val).length == 0) return true; break;
  51. case 'boolean' : if(!val) return true; break;
  52. case 'number' : if(0 === val) return true; break;
  53. case 'object' :
  54. if(null === val) return true;
  55. if(undefined !== val.length && val.length==0) return true;
  56. for(var k in val){return false;} return true;
  57. break;
  58. }
  59. return false;
  60. };
  61. // 限制只能输入金额
  62. function amount(th){
  63. var regStrs = [
  64. ['^0(\\d+)$', '$1'], //禁止录入整数部分两位以上,但首位为0
  65. ['[^\\d\\.]+$', ''], //禁止录入任何非数字和点
  66. ['\\.(\\d?)\\.+', '.$1'], //禁止录入两个以上的点
  67. ['^(\\d+\\.\\d{2}).+', '$1'] //禁止录入小数点后两位以上
  68. ];
  69. for(i=0; i<regStrs.length; i++){
  70. var reg = new RegExp(regStrs[i][0]);
  71. th.value = th.value.replace(reg, regStrs[i][1]);
  72. }
  73. }
  74. /**
  75. * 判断变量是否空值
  76. * undefined, null, '', false, 0, [], {} 均返回true,否则返回false
  77. */
  78. function empty(v){
  79. switch (typeof v){
  80. case 'undefined' : return true;
  81. case 'string' : if($.trim(v).length == 0) return true; break;
  82. case 'boolean' : if(!v) return true; break;
  83. case 'number' : if(0 === v) return true; break;
  84. case 'object' :
  85. if(null === v) return true;
  86. if(undefined !== v.length && v.length==0) return true;
  87. for(var k in v){return false;} return true;
  88. break;
  89. }
  90. return false;
  91. }
  92. /*
  93. 下拉刷新
  94. url:刷新请求数据接口链接
  95. page:当前刷新的页面ID
  96. cls:刷新内容层的class
  97. content:当前触发刷新层class
  98. callback:执行回调
  99. */
  100. function refresh(url,page,cls,content,callback){
  101. var refreshing = false;
  102. if (refreshing) return;
  103. refreshing =true;
  104. var query = new Object();
  105. query.p = 1;
  106. query.page_size = 10;
  107. $.ajax({
  108. url:url,
  109. type:"post",
  110. data:query,
  111. dataType:"html",
  112. success:function(result){
  113. setTimeout(function(){
  114. refreshing = false;
  115. var tplElement = $('<div id="tmpHTML"></div>').html(result),
  116. htmlObject = tplElement.find("#"+page).find(cls),
  117. html = $(htmlObject).html();
  118. $("#"+page).find(cls).html(html);
  119. // html_list_length >= 10 ? document.querySelector(".m-infinite-scroll-preloader").innerHTML = '<div class="infinite-scroll-preloader"><div class="preloader"></div></div>' : document.querySelector(".m-infinite-scroll-preloader").innerHTML = '<div class="infinite-scroll-preloader data-null"><div class="preloader">暂无更多数据</div></div>';
  120. $.pullToRefreshDone(content);
  121. if(callback){
  122. callback.call(this);
  123. }
  124. },500);
  125. },
  126. error:function(){
  127. refreshing = false;
  128. $.toast("请求失败!");
  129. $.pullToRefreshDone(content);
  130. }
  131. });
  132. }
  133. // ajax公用封装
  134. var handleAjax;
  135. if (!handleAjax) handleAjax = {};
  136. (function (h) {
  137. h.ajax = function(url, param, dataType, ajaxType){
  138. // 利用了jquery延迟对象回调的方式对ajax封装,使用done(),fail(),always()等方法进行链式回调操作
  139. // 如果需要的参数更多,比如有跨域dataType需要设置为'jsonp'等等,也可以不做这一层封装,还是根据工程实际情况判断吧,重要的还是链式回调
  140. dataType ? dataType = dataType : dataType = '';
  141. ajaxType ? ajaxType = ajaxType : ajaxType = '';
  142. if(dataType == "html"){
  143. param ? param = param : param = '';
  144. }
  145. else{
  146. param ? param = $.extend(param, {post_type:'json', itype:'shop'}) : param = {post_type:'json', itype:'shop'};
  147. }
  148. return $.ajax({
  149. url: url,
  150. data: param || {},
  151. type: 'POST',
  152. dataType: dataType || 'json',
  153. beforeSend:function(){
  154. $.showIndicator();
  155. }
  156. });
  157. };
  158. h.handle=function(url, param, dataType, ajaxType){
  159. return h.ajax(url, param, dataType).then(function(result){
  160. // 成功回调
  161. $.hideIndicator();
  162. dataType ? dataType = dataType : dataType = '';
  163. ajaxType ? ajaxType = ajaxType : ajaxType = '';
  164. if(dataType == 'html' || ajaxType == 1){
  165. return result;
  166. // 直接返回要处理的数据,作为默认参数传入之后done()方法的回调
  167. }
  168. else{
  169. if(result.status == 1){
  170. if(result.error)
  171. return result.error;
  172. else
  173. return '操作成功';
  174. // 直接返回要处理的数据,作为默认参数传入之后done()方法的回调
  175. }
  176. else{
  177. return $.Deferred().reject(result.error ? result.error : "操作失败"); // 返回一个失败状态的deferred对象,把错误代码作为默认参数传入之后fail()方法的回调
  178. }
  179. }
  180. }, function(err){
  181. // 失败回调
  182. // $.hideIndicator();
  183. return err;
  184. // console.log(err.status); // 打印状态码
  185. });
  186. };
  187. })(handleAjax);
  188. // 倒计时
  189. var setInterval_left_time = null;
  190. var left_time = function(left_time,element){
  191. if(left_time){
  192. setInterval_left_time = setInterval(function() {
  193. if(left_time){
  194. var day = parseInt(left_time / 24 /3600);
  195. var hour = parseInt((left_time % (24 *3600)) / 3600);
  196. var min = parseInt((left_time % 3600) / 60);
  197. var sec = parseInt((left_time % 3600) % 60);
  198. var cc = document.getElementById(element);
  199. day<10 ? day="0"+day : day=day;
  200. hour<10 ? hour="0"+hour : hour=hour;
  201. min<10 ? min="0"+min : min=min;
  202. sec<10 ? sec="0"+sec : sec=sec;
  203. $(element).html(day+"天"+hour+"时"+min+"分"+sec+"秒");
  204. left_time--;
  205. }
  206. else{
  207. clearInterval(setInterval_left_time);
  208. location.reload();
  209. $.showPreloader();
  210. }
  211. }, 1000);
  212. document.addEventListener("visibilitychange", function (e) {
  213. clearInterval(setInterval_left_time);
  214. $(element).html("--天--时--分--秒");
  215. }, false);
  216. }
  217. };
  218. // 获取地址栏参数
  219. function GetQueryString(name) {
  220. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  221. var r = window.location.search.substr(1).match(reg);
  222. if (r != null) return unescape(r[2]); return null;
  223. }