Register.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  1. /*
  2. 问题:
  3. 1、注册的接口不完善 没有非窗体注册的函数
  4. */
  5. Namespace.register("U.MD.U.R"); //用户注册的命名空间
  6. // 用户名 密码 确认密码 验证码 后面2个都没有用
  7. //用于判断用户是否已经在输入框中输入了正确的值。
  8. U.MD.U.R.isregister = [false, false, false, false, false, true];
  9. //#region 用户注册信息判断
  10. //#region 用户注册使用区域
  11. /**
  12. * 弹出注册框的处理
  13. *
  14. */
  15. U.MD.U.R.register = function () {
  16. var _parent = $("#U_MD_U_L_login"); //登录注册框
  17. //弹出注册框
  18. // new U.UF.UI.form("", _parent[0],
  19. // {
  20. // "id": "U_MD_HomeC_Pop",
  21. // "style": {
  22. // "width": "360px",
  23. // "height": "505px"
  24. // }
  25. // },
  26. // {
  27. // isdrag: false,
  28. // isstretching: false,
  29. // isenlarge: false,
  30. // isnarrow: false
  31. // });
  32. var _child = _parent.Child(); //获取登录注册找回密码的div
  33. _child[1].style.display = "block"; //显示注册框
  34. _child[2].style.display = "none"; //隐藏注册
  35. _child[3].style.display = "none"; //隐藏登录
  36. $("div", _child[0])[2].innerHTML = "快速注册";
  37. //头部设置内容
  38. var _head = $(_child[0]).childs()[1];
  39. //设置头部内容
  40. $(_head).addAttrArray({
  41. innerHTML: "已经有账号? <span onclick='U.MD.U.L.init();'>现在登录</div>",
  42. title: "",
  43. "className": "U_MD_U_L_Top_Yun"
  44. });
  45. //注册验证码区域
  46. if (!$("#U_MD_U_R_VC_Img img")[0]) {
  47. //"onerror": U.MD.C.imgError,
  48. $$("img", { //生成验证码
  49. "alt": "看不清?点击重获验证码",
  50. "src": "http://main.1473.cn/Uses.ashx?mode=GraphicVerificationCode&n=" + Math.random(),
  51. "onclick": function () {
  52. U.MD.U.R.regenerateVerificaCode(this);
  53. }
  54. }, $("#U_MD_U_R_VC_Img")[0]);
  55. }
  56. //输入框聚焦
  57. var _input = $("input", _child[1])[0];
  58. _input.focus();
  59. }
  60. /**
  61. * 重新生成验证码
  62. * @param {element} 生成验证码的图片
  63. *
  64. */
  65. U.MD.U.R.regenerateVerificaCode = function (image) {
  66. image.src = "http://main.1473.cn/Uses.ashx?mode=GraphicVerificationCode&n=" + Math.random();
  67. }
  68. /**
  69. * 单击注册按钮后,首先判断是否已经阅读了云端协议,然后检查是否用户输入的信息是否全部合法。
  70. * @param {element} 按钮
  71. *
  72. */
  73. U.MD.U.R.clickRegister = function (button) {
  74. var _inputs = $("#U_MD_U_R_I").find("input");
  75. //是否已经阅读了云端协议。
  76. if (_inputs[3].checked) {
  77. //判断注册的信息是否通过,都通过直接注册处理
  78. if (U.MD.U.R.isRegister(_inputs, button) && _inputs[2].value != "") {
  79. U.MD.U.R.ajaxRegister(_inputs[0].value, _inputs[1].value, "", $("#U_MD_U_L_login")[0]); //调用ajax的注册
  80. _inputs.addAttrArray({ "value": "" }); //注册可以通过,那么所有填写的信息都删除
  81. //调用这个复原输入框的样式
  82. for (i = 0; i < _inputs.length; i++) {
  83. if (_inputs[i].offsetWidth && _inputs[i].onblur) { //如果input没有隐藏的情况
  84. _inputs[i].onblur();
  85. }
  86. }
  87. button.innerText = "注册中..."; //注册按钮提示处理
  88. }
  89. //弹出提示框
  90. else if (_inputs[0].value != "" && _inputs[1].value == "") {
  91. U.alert("请填写密码");
  92. }else if (_inputs[1].value != "" && _inputs[2].value == "") {
  93. U.alert("请正确填写信息");
  94. }
  95. else {
  96. U.alert("请正确的填写信息");
  97. }
  98. }
  99. //如果没有勾选云端协议处理
  100. else {
  101. U.alert("请阅读云端协议");
  102. }
  103. }
  104. /**
  105. * 注册判断设置
  106. * @param {element} 输入的框
  107. * @param {element} 按钮
  108. *
  109. */
  110. U.MD.U.R.isRegister = function (inputs, button) {
  111. var _checked = U.MD.U.R.isregister.indexOf(false); //判断注册的信息里是否有没有填写或者填写有问题的
  112. //如果所有的填写数据都是成功的处理
  113. if (_checked == -1) {
  114. return true;
  115. }
  116. //如果错误只是验证码错误
  117. else if (_checked == 4) {
  118. //验证码获取
  119. U.MD.U.R.verificationCode(inputs[2], function () {
  120. U.MD.U.R.clickRegister(button); //验证码获取成功后的回调处理
  121. });
  122. return true;
  123. }
  124. return false;
  125. }
  126. //用户注册Ajax函数。
  127. /**
  128. //外面用户可以直接调用U.MD.U.R.register(username,password),调用之前必须设置全局变量US.systemId,测试用户U.MD.U.R.register=0.开发者账号需要进入授权系统进行授权
  129. 返回值:
  130. */
  131. U.MD.U.R.ajaxRegister = U.MD.U.R.UR = function (username, password, email, loading) {
  132. U.MD.U.R.isregister = [false, false, false, false, false, true]; //注册成功响应后,允许注册的值改成false
  133. //注册处理,调用后台注册
  134. U.A.Request(US.USER, ["UserRegister", username, password, email, US.city.userAllLocation, ""],
  135. U.MD.U.R.asynRegister, [loading, US.city.userAllLocation]); //注册的同时执行登录
  136. }
  137. /**
  138. * 用户注册异步
  139. * @param {element} 输入的框
  140. * @param {element} 按钮
  141. *
  142. */
  143. U.MD.U.R.asynRegister = function (r, outsite) {
  144. var value = r.value;
  145. //账号重复注册的处理
  146. if (value == "notregister") {
  147. U.alert("已经存在该账号!");
  148. }
  149. //注册失败
  150. else if (value == "false") {
  151. U.alert("系统繁忙,请稍后。");
  152. }
  153. //注册成功,直接登录处理
  154. else {
  155. //注册成功直接登录
  156. U.MD.U.L.asynLoginAjax(r);
  157. //写入用户来源信息,根据链接统计是哪一个推广人员推广的。
  158. U.MD.U.NP.TGR();
  159. return r;
  160. }
  161. }
  162. /**
  163. * 验证码javascript
  164. * @param {element} 输入的框
  165. * @param {element} 按钮
  166. *
  167. */
  168. U.MD.U.R.verificationCode = function (input, cb) {
  169. var _code = input.value, //输入的验证码值
  170. _isnumber = U.UF.S.Number.test(_code); //判断输入的验证码是否符合格式
  171. if (_isnumber) {
  172. //发送ajax判断是否注册成功
  173. U.A.Request(US.USER, ["ConfirmGraphicVerificationCode", _code],
  174. U.MD.U.R.asynVerificationCode, ["", input, cb]);
  175. //验证码样式设置
  176. U.MD.U.R.setInputStyle(input, { 'textAlign': 'right', 'color': 'red', "display": "block" }, "验证中...");
  177. }
  178. else if (_code) {
  179. //验证码样式设置
  180. U.MD.U.R.setInputStyle(input, { 'textAlign': 'right', 'color': 'red', "display": "block" }, "格式错误");
  181. }
  182. else {
  183. //验证码样式设置
  184. U.MD.U.R.setInputStyle(input, { 'textAlign': 'right', 'color': '#00aa99', "display": "block" }, "验证码");
  185. }
  186. }
  187. /**
  188. * 验证码异步
  189. *
  190. */
  191. U.MD.U.R.asynVerificationCode = function (r) {
  192. var _context = r.context, //参数
  193. _input = _context[1], //验证码输入框
  194. _cb = _context[2] //回调函数
  195. ;
  196. r = r.value; //得到后台数据库返回的值
  197. //如果验证码正确的处理
  198. if (r == "True") {
  199. U.MD.U.R.setInputStyle(_input, { 'textAlign': 'right', 'marginRight': '0px', 'color': '#00aa99', "display": "block" }, "成功"); //设置提示说明样式
  200. U.MD.U.R.isregister[4] = true; //设置验证码成功
  201. if (U.UF.C.isFunction(_cb)) {
  202. _cb(); //成功后的回调
  203. }
  204. }
  205. //验证码正确
  206. else if (r == "False") {
  207. U.MD.U.R.setInputStyle(_input, { 'textAlign': 'right', 'marginRight': '15px', 'color': 'red', "display": "block" }, "错误"); //设置提示说明样式
  208. return false;
  209. }
  210. //重新生成验证码
  211. else {
  212. _input.value = ""; //清空验证码输入
  213. _input.blur(); //调用blur复原输入框值
  214. U.MD.U.R.setInputStyle(_input, { 'textAlign': 'center', 'marginRight': '0px', 'color': '#00aa99', "display": "block" }, "验证码"); //设置提示说明样式
  215. $("img", $(_input).Parent(3))[0].src = "http://main.1473.cn/Uses.ashx?mode=GraphicVerificationCode&n=" + Math.random(); //重新生成验证码
  216. _input.focus(); //验证码聚焦
  217. U.alert("验证码错误或者服务器繁忙"); //弹出服务器繁忙
  218. }
  219. }
  220. //#endregion
  221. /*
  222. 判断用户名 这里包括登录所有的用户名的审核 是否通过等。此函数在cookie登录中不会调用。
  223. 参数一:
  224. 参数二:UDE为数组,
  225. 参数三:
  226. 返回值:
  227. */
  228. U.MD.U.R.checkUserName = function (inputel) {
  229. var _username = inputel.value; //获取用户名
  230. //输入为空不做变化
  231. $('.U_MD_U_L_Box_U_B').removeClass(" U_MD_U_L_Box_mistakeBorder");
  232. if ($('.U_MD_U_L_Box_checkUseNameFormat')[0]) {//检测账号格式提示是否存在
  233. $('.U_MD_U_L_Box_checkUseNameFormat')[0].parentNode.removeChild($('.U_MD_U_L_Box_checkUseNameFormat')[0]);
  234. }
  235. if (_username == "") {
  236. U.MD.U.R.setInputStyle(inputel, { "display": "block", 'textAlign': 'left' }, "用户账号"); //输入的用户名为空的样式处理
  237. }
  238. //注册的用户不符合要求
  239. else if (!U.UF.S.UserName.test(_username)) {
  240. $('.U_MD_U_L_Box_U_B').addClass(" U_MD_U_L_Box_mistakeBorder");
  241. U_MD_U_L_createFormat($('.U_MD_U_L_LB')[0], $('.U_MD_U_L_Box_P_B')[0]);
  242. //U.MD.U.R.setInputStyle(inputel, { "display": "block", 'textAlign': 'right' }, "2-10汉字或4-20字符"); //注册用户名不符合提示
  243. }
  244. //用户注册 需要判断用户是否有重复的用户名
  245. else {
  246. U.MD.U.R.setInputStyle(inputel, { "display": "block", 'textAlign': 'right' }, "等待认证,请稍后..."); //设置注册的提示
  247. U.A.Request(US.USER, ["CheckUserName", _username], U.MD.U.R.asynCheckUserName, ["", inputel]);
  248. }
  249. }
  250. /**
  251. *创建用户账号是否标准提醒
  252. *
  253. */
  254. U_MD_U_L_createFormat = function (parentnode, beforenode) {
  255. if (beforenode == $('.U_MD_U_L_Box_P_B')[0] && $('.U_MD_U_L_Box_checkUseNameFormat')[0]) {
  256. $('.U_MD_U_L_Box_checkUseNameFormat')[0].parentNode.removeChild($('.U_MD_U_L_Box_checkUseNameFormat')[0]);
  257. }
  258. var _format = document.createElement('div');
  259. _format.className = "U_MD_U_L_Box_checkUseNameFormat";
  260. _format.innerText = "2-10汉字或4-20字符";
  261. parentnode.insertBefore(_format, beforenode);
  262. }
  263. /**
  264. * 判断用户名是否存在
  265. * @param {object} ajax对象
  266. *
  267. */
  268. U.MD.U.R.asynCheckUserName = function (r) {
  269. var _context = r.context,
  270. _inputel = _context[1];
  271. r = r.value;
  272. //无法注册
  273. if (r == true) {
  274. U.MD.U.R.setInputStyle(_inputel, { "color": "red" }, "已被注册!");
  275. }
  276. //成功注册
  277. else {
  278. U.MD.U.R.setInputStyle(_inputel, { "display": "none" });
  279. U.MD.U.R.isregister[0] = true;
  280. }
  281. }
  282. /**
  283. * 判断密码输入是否有问题
  284. * @param {object} ajax对象
  285. *
  286. */
  287. U.MD.U.R.checkPassword = function (inputel) {
  288. var _password = inputel.value;
  289. $('.U_MD_U_L_Box_P_B').removeClass(" U_MD_U_L_Box_mistakeBorder");
  290. if ($('.U_MD_U_L_Box_checkPWFormat')[0]) {
  291. $('.U_MD_U_L_Box_checkPWFormat')[0].parentNode.removeChild($('.U_MD_U_L_Box_checkPWFormat')[0]);
  292. }
  293. //如果没有输入密码
  294. if (_password == "") {
  295. U.MD.U.R.setInputStyle(inputel, { "display": "block", 'textAlign': 'left', 'marginRight': '0px' }, "6-20位字符或数字"); //没有输入密码的提示
  296. }
  297. //输入的密码的格式不对
  298. else if (!U.UF.S.PassWord.test(_password)) {
  299. $('.U_MD_U_L_Box_P_B').addClass(" U_MD_U_L_Box_mistakeBorder");
  300. U_MD_U_L_checkPWFormat($('.U_MD_U_L_LB')[0], $('.U_MD_U_R_VC')[0]);
  301. //U.MD.U.R.setInputStyle(inputel, { "display": "block", "color": "red", 'textAlign': 'right', 'marginRight': '15px' }, "6-20位字符或数字"); //输入的密码有问题
  302. }
  303. //输入
  304. else {
  305. U.MD.U.R.passwordStrength(inputel); //判断输入的密码强度
  306. U.MD.U.R.isregister[1] = true; //设置已经成功通过密码审核
  307. return true;
  308. }
  309. return false;
  310. }
  311. /**
  312. *创建用户账号是否标准提醒
  313. *
  314. */
  315. U_MD_U_L_checkPWFormat = function (parentnode, beforenode) {
  316. if (beforenode == $('.U_MD_U_R_VC')[0] && $('.U_MD_U_L_Box_checkPWFormat')[0]) {
  317. $('.U_MD_U_L_Box_checkPWFormat')[0].parentNode.removeChild($('.U_MD_U_L_Box_checkPWFormat')[0]);
  318. }
  319. var _format = document.createElement('div');
  320. _format.className = "U_MD_U_L_Box_checkPWFormat";
  321. _format.innerText = "2-10汉字或4-20字符";
  322. parentnode.insertBefore(_format, beforenode);
  323. }
  324. /**
  325. * 隐藏提示框,隐藏提示框,一般都在在点击重新输入,或者是点击取消提示框的时候使用
  326. * @param {object} ajax对象
  327. *
  328. */
  329. U.MD.U.R.hidePromptBox = function (el) {
  330. var _parentel = $(el).Parent(); //上级父亲层;
  331. $("i", _parentel)[0].style.display = "none"; //提示框隐藏
  332. try {
  333. $("input", _parentel)[0].focus();
  334. }
  335. catch (e) { }
  336. }
  337. /**
  338. * 设置样式
  339. * @param {element} 输入的框
  340. * @param {element} 样式
  341. *
  342. */
  343. U.MD.U.R.setInputStyle = function (input, styles, text) {
  344. //找input输入框的父亲元素
  345. var _parent = $(input).Parent();
  346. //指定的元素里面找孩子元素为i的元素
  347. var _el = $("i", _parent);
  348. styles.display = "block";
  349. _el.addAttrArray({ "style": styles, "innerHTML": text || "" }, 0)[0];
  350. }
  351. /**
  352. * 设置样式
  353. * @param {element} 输入的框+
  354. *
  355. */
  356. U.MD.U.R.passwordStrength = function (input) {
  357. var i = 0,
  358. _value = input.value,
  359. _arr = [
  360. ["弱", "#e64141"],
  361. ["中", "#0a8cd2"],
  362. ["强", "#4bb900"]];
  363. //如果输入的内容大于10,那么加一
  364. if (_value.length > 10) {
  365. i++;
  366. }
  367. //如果输入的内容含数字,那么加一
  368. if (_value.match(/[0-9]/ig)) {
  369. i++;
  370. }
  371. //如果输入的内容含字符,那么加一
  372. if (_value.match(/[a-z]/ig)) {
  373. i++;
  374. }
  375. //选择输入的强度数字
  376. i = i > 0 ? i - 1 : i;
  377. //找input输入框的父亲元素
  378. var _parent = $(input).Parent();
  379. //指定的元素里面找孩子元素为i的元素
  380. var _el = $("i", _parent);
  381. //设置样式
  382. _el.addAttrArray({
  383. "style": {
  384. "textAlign": "right",
  385. "display": "block",
  386. "color": _arr[i][1]
  387. },
  388. "innerHTML": _arr[i][0]
  389. }, 0); //设置密码样式
  390. }
  391. //#endregion