ans-m.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. /**
  2. *
  3. * DWSurvey 3.0 中关于问卷设计Javascript
  4. *
  5. * @desc: design survey
  6. * @author: keyuan(@keyuan, keyuan258@gmail.com)
  7. * @github: https://github.com/wkeyuan/DWSurvey
  8. *
  9. * Copyright 2012, 2017 调问问卷(DWSurvey,http://dwsurvey.net)
  10. *
  11. */
  12. $(document).ready(function(){
  13. var ctx=$("#ctx").val();
  14. var sid = $.getUrlParam("sid");
  15. var surveyId = $.getUrlParam("surveyId");
  16. var tag = $.getUrlParam("tag");
  17. var ruleCode = $.getUrlParam("ruleCode");
  18. var wxCode = $.getUrlParam("code");
  19. $("#sid").val(sid);
  20. $("#id").val(surveyId);
  21. $("#tag").val(tag);
  22. $("#ruleCode").val(ruleCode);
  23. $("#wxCode").val(wxCode);
  24. if(tag!="" && (tag==="p" || tag==="s")){
  25. $("#preview_head_top").show();
  26. }else{
  27. $("#preview_head_top").remove();
  28. }
  29. querySurveyAll(function(){
  30. sww();
  31. if(!$("#preview_head_top")[0]){
  32. checkAnswerSurvey(sid);
  33. }
  34. });
  35. });
  36. function sww(){
  37. $(".nextPage_a").click(function(){
  38. if(validateForms()){
  39. var thParent=$(this).parent();
  40. var nextPageNo=thParent.find("input[name='nextPageNo']").val();
  41. $(".li_surveyQuItemBody").hide();
  42. $(".surveyQu_"+nextPageNo).fadeIn("slow");
  43. $("html,body").animate({scrollTop:10},500);
  44. }
  45. return false;
  46. });
  47. $(".prevPage_a").click(function(){
  48. var thParent=$(this).parent();
  49. var prevPageNo=thParent.find("input[name='prevPageNo']").val();
  50. $(".li_surveyQuItemBody").hide();
  51. $(".surveyQu_"+prevPageNo).fadeIn("slow");
  52. $(window).scrollTop(10);
  53. return false;
  54. });
  55. $(".m_clickQuOrderItem").click(function(){
  56. var visibleOrderbyNum=$(this).parents().find(".m_orderby_num:visible");
  57. var thOrderbyNum=$(this).find(".m_orderby_num");
  58. if(!$(this).find(".m_orderby_num:visible")[0]){
  59. var thNum=0;
  60. $(this).append("<select class='m_orderby_sel' > </select>");
  61. var mOrderbySel=$(this).find(".m_orderby_sel");
  62. var quOrderItems=$(this).parents().find(".m_clickQuOrderItem");
  63. $.each(quOrderItems,function(i,item){
  64. mOrderbySel.append("<option value='"+(i+1)+"'>移至排序"+(i+1)+"</option>");
  65. var targetHid=$(this).parents(".ui-controlgroup-controls ").find(".quOrderItemHidInput[value='"+(i+1)+"']");
  66. if(!targetHid[0] && thNum===0){
  67. thNum=(i+1);
  68. }
  69. });
  70. thOrderbyNum.text(thNum);
  71. thOrderbyNum.show();
  72. mOrderbySel.val(thNum)
  73. $(this).find(".quOrderItemHidInput").val(thNum);
  74. }
  75. bindEvent();
  76. lgcommon($(this));
  77. validateCheck($(this).parents(".li_surveyQuItemBody"),false);
  78. return false;
  79. });
  80. function bindEvent(){
  81. $(".m_orderby_sel").unbind();
  82. $(".m_orderby_sel").change(function(){
  83. var thOrderbyItem=$(this).parents(".m_clickQuOrderItem");
  84. var thOrderByNum=thOrderbyItem.find(".quOrderItemHidInput").val();
  85. var thChangeNum=$(this).val();
  86. var targetHid=$(this).parents(".ui-controlgroup-controls ").find(".quOrderItemHidInput[value='"+thChangeNum+"']");
  87. if(targetHid[0]){
  88. var targetOrderbyItem=targetHid.parents(".m_clickQuOrderItem");
  89. targetOrderbyItem.find(".m_orderby_num").text(thOrderByNum);
  90. targetOrderbyItem.find(".quOrderItemHidInput").val(thOrderByNum);
  91. targetOrderbyItem.find(".m_orderby_sel").val(thOrderByNum);
  92. }
  93. thOrderbyItem.find(".m_orderby_num").text(thChangeNum);
  94. thOrderbyItem.find(".quOrderItemHidInput").val(thChangeNum);
  95. thOrderbyItem.find(".m_orderby_sel").val(thChangeNum);
  96. });
  97. }
  98. /**评分题*/
  99. $(".starRating .fa").hover(function(){
  100. var prevAll=$(this).prevAll();
  101. prevAll.removeClass("fa-star-o");
  102. prevAll.addClass("fa-star");
  103. $(this).removeClass("fa-star-o");
  104. $(this).addClass("fa-star");
  105. },function(){
  106. var scoreRow=$(this).parents(".scoreRow");
  107. var starNum=scoreRow.find(".scoreNumInput").val();
  108. if(starNum==""&&starNum<=0){
  109. var thParent=$(this).parent();
  110. var fas=thParent.find(".fa");
  111. fas.removeClass("fa-star");
  112. fas.addClass("fa-star-o");
  113. }
  114. });
  115. $(".starRating .fa").click(function(){
  116. var thParent=$(this).parent();
  117. var fas=thParent.find(".fa");
  118. fas.removeClass("fa-star");
  119. fas.addClass("fa-star-o");
  120. var prevAll=$(this).prevAll();
  121. prevAll.removeClass("fa-star-o");
  122. prevAll.addClass("fa-star");
  123. $(this).removeClass("fa-star-o");
  124. $(this).addClass("fa-star");
  125. var scoreRow=$(this).parents(".scoreRow");
  126. var starNum=0;
  127. if(prevAll[0]){
  128. starNum=prevAll.size();
  129. }
  130. scoreRow.find(".scoreNumInput").val(starNum+1);
  131. validateCheck($(this).parents(".li_surveyQuItemBody"),false);
  132. return false;
  133. });
  134. //表单验证
  135. /**初始化表单骓证配置**/
  136. function validateForms(){
  137. var result=true;
  138. var surveyQuItemBodys=$(".li_surveyQuItemBody");
  139. var firstError=null;
  140. $.each(surveyQuItemBodys,function(){
  141. var quItemBody=$(this);
  142. if(!validateCheck(quItemBody,true)){
  143. //定位到这题
  144. if(firstError==null){
  145. firstError=quItemBody;
  146. }
  147. result=false;
  148. }
  149. });
  150. if(firstError!=null){
  151. $(window).scrollTop(firstError.offset().top);
  152. }
  153. if($("#jcaptchaImgBody").is(":visible")){
  154. var jcaptchaInput = $("input[name='jcaptchaInput']").val();
  155. if(jcaptchaInput===""){
  156. $("#jcaptchaImgBody .errorItem").show();
  157. result = false;
  158. }else{
  159. $("#jcaptchaImgBody .errorItem").hide();
  160. }
  161. }
  162. return result;
  163. }
  164. function validateCheck(quItemBody,isSubForm){
  165. if(quItemBody.is(":visible")){
  166. var quId=quItemBody.find(".quId").val();
  167. var quType=quItemBody.find(".quType").val();
  168. var isRequired=quItemBody.find(".isRequired").val();
  169. var validateStatus=false;
  170. var checkType = "";
  171. if(isRequired==="0"){
  172. validateStatus = true;
  173. return true;
  174. }
  175. if(quType==="RADIO"){
  176. var hv = quItemBody.find(".hv").val();
  177. if(hv=="4"){
  178. var radioSelectVal = quItemBody.find(".radioSelect").val();
  179. if(radioSelectVal!="" && radioSelectVal!="0"){
  180. validateStatus = true;
  181. }else{
  182. validateStatus = false;
  183. }
  184. }else{
  185. validateStatus=quItemBody.find("input[type='radio']:checked")[0];
  186. }
  187. }else if(quType==="CHECKBOX"){
  188. validateStatus=quItemBody.find("input[type='checkbox']:checked")[0];
  189. }else if(quType==="FILLBLANK"){
  190. var value = quItemBody.find(".fillblankInput").val();
  191. validateStatus=value!="";
  192. checkType = quItemBody.find(".checkType").val();
  193. if(validateStatus){
  194. validateStatus = checkoutData(checkType, value);
  195. }
  196. }else if(quType==="ORDERQU"){
  197. //quItemBody.find(".quOrderByLeftUl label");
  198. validateStatus=!quItemBody.find(".quOrderItemHidInput[value=0]")[0];
  199. }else if(quType==="MULTIFILLBLANK"){
  200. validateStatus=true;
  201. var quScoreOptionTrs=quItemBody.find(".mFillblankTableTr");
  202. var paramInt01=quItemBody.find(".paramInt01");
  203. var anNum = 0;
  204. $.each(quScoreOptionTrs,function(){
  205. var scoreNumInput=$(this).find(".dwMFillblankInput");
  206. if(scoreNumInput.val()!=""){
  207. anNum++;
  208. }
  209. });
  210. if(paramInt01[0]){
  211. if(paramInt01.val()=='0'){
  212. if(anNum!=quScoreOptionTrs.size()) {
  213. validateStatus = false;
  214. }
  215. }else{
  216. if(anNum<parseInt(paramInt01.val())) {
  217. validateStatus = false;
  218. }
  219. }
  220. }else{
  221. if(anNum!=quScoreOptionTrs.size()) {
  222. validateStatus = false;
  223. }
  224. }
  225. }else if(quType==="SCORE"){
  226. validateStatus=true;
  227. var quScoreOptionTrs=quItemBody.find(".quScoreOptionTr");
  228. $.each(quScoreOptionTrs,function(){
  229. var scoreNumInput=$(this).find(".scoreNumInput");
  230. if(scoreNumInput.val()===""){
  231. validateStatus=false;
  232. return false;
  233. }
  234. });
  235. }else if(quType==="submitSurveyBtn" || quType==="PARAGRAPH" || quType==="PAGETAG"){
  236. return true;
  237. }
  238. }else{
  239. validateStatus=true;
  240. }
  241. if(validateStatus){
  242. quItemBody.find(".errorItem").remove();
  243. }else{
  244. if(isSubForm){
  245. if(quItemBody.find(".errorItem")[0]){
  246. quItemBody.find(".errorItem").remove();
  247. }
  248. var errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请检查题目答案,为必答项!</label></div>";
  249. if(checkType=="EMAIL"){
  250. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入Email,为必答项!</label></div>";
  251. }else if(checkType=="UNSTRCN"){
  252. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入非中文字符,为必答项!</label></div>";
  253. }else if(checkType=="STRCN"){
  254. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入中文字符,为必答项!</label></div>";
  255. }else if(checkType=="NUM"){
  256. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入数字,为必答项!</label></div>";
  257. }else if(checkType == "DIGITS"){
  258. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入整数,为必答项!</label></div>";
  259. }else if(checkType == "TELENUM"){
  260. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入电话,为必答项!</label></div>";
  261. }else if(checkType == "PHONENUM"){
  262. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入手机,为必答项!</label></div>";
  263. }else if(checkType == "TELE_PHONE_NUM"){
  264. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入电话或手机,为必答项!</label></div>";
  265. }else if(checkType == "DATE"){
  266. //2014-01-01 12:00:00
  267. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入如:2014-01-01,为必答项!</label></div>";
  268. }else if(checkType == "IDENTCODE"){
  269. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入身份证号,为必答项!</label></div>";
  270. }else if(checkType == "ZIPCODE"){
  271. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入邮编,为必答项!</label></div>";
  272. }else if(checkType == "URL"){
  273. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入URL,为必答项!</label></div>";
  274. }
  275. quItemBody.find(".surveyQuItemContent").append(errorHtml);
  276. }
  277. }
  278. return validateStatus;
  279. }
  280. $(".submitSurvey").click(function(){
  281. if(validateForms()){
  282. $("#surveyForm").submit();
  283. }
  284. return false;
  285. });
  286. $(".radioSelect").change(function(){
  287. var thVal = $(this).val();
  288. var thName = $(this).attr("name");
  289. var quCoItemUlLi = $(this).parents("li.quCoItemUlLi");
  290. var quItemInputCase= quCoItemUlLi.find(".quItemInputCase[itemid='"+thVal+"']");
  291. var isNote = quItemInputCase.find(".isNote").val();
  292. if(isNote=="1"){
  293. quCoItemUlLi.find(".dwQuOptionItemNote").hide();
  294. var dwQuOptionItemNote = quCoItemUlLi.find(".dwQuOptionItemNote[name='text_"+thName+"_"+thVal+"']");
  295. dwQuOptionItemNote.show();
  296. }else{
  297. quCoItemUlLi.find(".dwQuOptionItemNote").hide();
  298. }
  299. var thObj = $(this);
  300. var quItemBody = $(this).parents(".li_surveyQuItemBody");
  301. validateCheck(quItemBody,false);
  302. return false;
  303. });
  304. $("#dwSurveyQuContent .dwQuOptionItemContent").unbind();
  305. $("#dwSurveyQuContent .dwQuOptionItemContent").click(function(){
  306. clickItem($(this));
  307. lgcommon($(this));
  308. validateCheck($(this).parents(".li_surveyQuItemBody"),false);
  309. $(".fillblankInput,.dwMFillblankInput,.dwChenMFillblankInput").blur();
  310. });
  311. function clickItem(thObj){
  312. var quItemBody=thObj.parents(".li_surveyQuItemBody");
  313. var quType=quItemBody.find(".quType").val();
  314. var dwQuInputLabel=thObj.find(".dwQuInputLabel");
  315. if("RADIO"===quType){
  316. quItemBody.find(".dwQuInputLabel").removeClass("checked");
  317. quItemBody.find("input[type='radio']").prop("checked",false);
  318. thObj.find("input[type='radio']").prop("checked",true);
  319. dwQuInputLabel.addClass("checked");
  320. quItemBody.find(".dwQuOptionItemContent").removeClass("active");
  321. thObj.addClass("active");
  322. }else if("CHECKBOX"===quType){
  323. var thCheckbox = thObj.find("input[type='checkbox']");
  324. if(thCheckbox.prop("checked")){
  325. thObj.find("input[type='checkbox']").prop("checked",false);
  326. dwQuInputLabel.removeClass("checked");
  327. thObj.removeClass("active");
  328. }else{
  329. thObj.find("input[type='checkbox']").prop("checked",true);
  330. dwQuInputLabel.addClass("checked");
  331. thObj.addClass("active");
  332. }
  333. }else if("MULTIFILLBLANK"===quType){
  334. var chenRow=thObj.parents(".mFillblankTableTr");
  335. chenRow.find(".dwQuInputLabel").removeClass("checked");
  336. chenRow.find("input[type='radio']").prop("checked",false);
  337. thObj.find("input[type='radio']").prop("checked",true);
  338. dwQuInputLabel.addClass("checked");
  339. }
  340. }
  341. //填空题
  342. $(".fillblankInput,.dwMFillblankInput,.dwChenMFillblankInput").blur(function(){
  343. lgcommon($(this));
  344. validateCheck($(this).parents(".li_surveyQuItemBody"),true);
  345. });
  346. function resetQuNum(){
  347. var quTitleNums=$(".quTitleNum");
  348. $.each(quTitleNums,function(i,item){
  349. $(this).text((i+1)+"、")
  350. });
  351. }
  352. resetQuNum();
  353. var quTitleNums=$(".quTitleNum");
  354. $.each(quTitleNums,function(){
  355. var nextObj=$(this).next();
  356. if(nextObj[0]){
  357. var childrens=nextObj.children();
  358. if(childrens[0]){
  359. var firstChildren=childrens.first();
  360. if(firstChildren.is("p")){
  361. $(this).prependTo(firstChildren);
  362. }
  363. }
  364. }
  365. });
  366. var quLogics=$("#dwSurveyQuContent .quLogicItem");
  367. $.each(quLogics,function(){
  368. var loginItem=$(this);
  369. var cgQuItemId=loginItem.find(".cgQuItemId").val();
  370. var skQuId=loginItem.find(".skQuId").val();
  371. var logicId=loginItem.find(".logicId").val();
  372. var logicType=loginItem.find(".logicType").val();
  373. if(logicType==="2"){
  374. //逻辑类型为“显示”2 则初始化为隐藏
  375. var hidQuItemBody=$(".quId[value='"+skQuId+"']").parents(".li_surveyQuItemBody");
  376. hidQuItemBody.hide();
  377. hidQuItemBody.addClass("hidFor"+logicId);
  378. hidQuItemBody.find(".answerTag").attr("disabled",true);
  379. }
  380. });
  381. bindDateEvent();
  382. }
  383. function refreshAutoCode(codeImgId){
  384. var ctx = $("#ctx").val();
  385. $("#"+codeImgId).attr("src",ctx+"/jcaptcha.action");
  386. }