ans-m.js 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083
  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. var bfbFloat=0;
  38. $(document).ready(function(){
  39. $("#resultProgress").progressbar({value: bfbFloat,orientation: "vertical"});
  40. //分页设置 nextPage_a prevPage_a
  41. $(".nextPage_a").click(function(){
  42. if(validateForms()){
  43. var thParent=$(this).parent();
  44. var nextPageNo=thParent.find("input[name='nextPageNo']").val();
  45. // $(".li_surveyQuItemBody").hide();
  46. // $(".surveyQu_"+nextPageNo).fadeIn("slow");
  47. //$(window).scrollTop(10);
  48. var curPageNo = parseInt(nextPageNo)-1;
  49. $(".surveyQu_"+curPageNo).hide();
  50. var nextPageQus = $(".surveyQu_"+nextPageNo);
  51. $.each(nextPageQus,function(){
  52. var quItemBody = $(this);
  53. var itemBodyClass = quItemBody.attr("class");
  54. var quType = quItemBody.find(".quType").val();
  55. if(quType==="PAGETAG" || quType==="submitSurveyBtn"){
  56. quItemBody.show();
  57. }
  58. if(itemBodyClass.indexOf("hidFor")<0){
  59. quItemBody.show();
  60. }
  61. });
  62. var nextPageItems = $(".surveyQu_"+nextPageNo+":visible");
  63. if(nextPageItems[0]&&nextPageItems.size()<=1){
  64. $(nextPageItems[0]).find(".nextPage_a").click();
  65. }
  66. $("html,body").animate({scrollTop:10},500);
  67. }
  68. return false;
  69. });
  70. $(".prevPage_a").click(function(){
  71. var thParent=$(this).parent();
  72. var prevPageNo=thParent.find("input[name='prevPageNo']").val();
  73. // $(".li_surveyQuItemBody").hide();
  74. // $(".surveyQu_"+prevPageNo).fadeIn("slow");
  75. var curPageNo = parseInt(prevPageNo)+1;
  76. $(".surveyQu_"+curPageNo).hide();
  77. var prevPageQus = $(".surveyQu_"+prevPageNo);
  78. $.each(prevPageQus,function(){
  79. var quItemBody = $(this);
  80. var itemBodyClass = quItemBody.attr("class");
  81. //alert(itemBodyClass.indexOf("hidFor"));
  82. var quType = quItemBody.find(".quType").val();
  83. if(quType==="PAGETAG"){
  84. quItemBody.show();
  85. }
  86. if(itemBodyClass.indexOf("hidFor")<0){
  87. quItemBody.show();
  88. }
  89. });
  90. $(window).scrollTop(10);
  91. return false;
  92. });
  93. /**排序题*/
  94. $(".m_clickQuOrderItem").click(function(){
  95. var visibleOrderbyNum=$(this).parents(".surveyQuItem").find(".m_orderby_num:visible");
  96. var thOrderbyNum=$(this).find(".m_orderby_num");
  97. if($(this).find(".m_orderby_num:visible")[0]){
  98. }else{
  99. var thNum=0;
  100. $(this).append("<select class='m_orderby_sel' > </select>");
  101. var mOrderbySel=$(this).find(".m_orderby_sel");
  102. var quOrderItems=$(this).parents(".surveyQuItem").find(".m_clickQuOrderItem");
  103. $.each(quOrderItems,function(i,item){
  104. mOrderbySel.append("<option value='"+(i+1)+"'>移至排序"+(i+1)+"</option>");
  105. var targetHid=$(this).parents(".ui-controlgroup-controls ").find(".quOrderItemHidInput[value='"+(i+1)+"']");
  106. if(!targetHid[0] && thNum===0){
  107. thNum=(i+1);
  108. }
  109. });
  110. thOrderbyNum.text(thNum);
  111. thOrderbyNum.show();
  112. mOrderbySel.val(thNum)
  113. $(this).find(".quOrderItemHidInput").val(thNum);
  114. }
  115. bindEvent();
  116. runlogic($(this));
  117. validateCheck($(this).parents(".li_surveyQuItemBody"),false);
  118. answerProgressbar($(this));
  119. return false;
  120. });
  121. function bindEvent(){
  122. $(".m_orderby_sel").unbind();
  123. $(".m_orderby_sel").change(function(){
  124. //交换个排
  125. var thOrderbyItem=$(this).parents(".m_clickQuOrderItem");
  126. var thOrderByNum=thOrderbyItem.find(".quOrderItemHidInput").val();
  127. var thChangeNum=$(this).val();
  128. var targetHid=$(this).parents(".ui-controlgroup-controls ").find(".quOrderItemHidInput[value='"+thChangeNum+"']");
  129. if(targetHid[0]){
  130. var targetOrderbyItem=targetHid.parents(".m_clickQuOrderItem");
  131. targetOrderbyItem.find(".m_orderby_num").text(thOrderByNum);
  132. targetOrderbyItem.find(".quOrderItemHidInput").val(thOrderByNum);
  133. targetOrderbyItem.find(".m_orderby_sel").val(thOrderByNum);
  134. }
  135. thOrderbyItem.find(".m_orderby_num").text(thChangeNum);
  136. thOrderbyItem.find(".quOrderItemHidInput").val(thChangeNum);
  137. thOrderbyItem.find(".m_orderby_sel").val(thChangeNum);
  138. });
  139. }
  140. /**评分题*/
  141. $(".starRating .fa").hover(function(){
  142. var prevAll=$(this).prevAll();
  143. prevAll.removeClass("fa-star-o");
  144. prevAll.addClass("fa-star");
  145. $(this).removeClass("fa-star-o");
  146. $(this).addClass("fa-star");
  147. },function(){
  148. var scoreRow=$(this).parents(".scoreRow");
  149. var starNum=scoreRow.find(".scoreNumInput").val();
  150. if(starNum==""&&starNum<=0){
  151. var thParent=$(this).parent();
  152. var fas=thParent.find(".fa");
  153. fas.removeClass("fa-star");
  154. fas.addClass("fa-star-o");
  155. }
  156. });
  157. $(".starRating .fa").click(function(){
  158. var thParent=$(this).parent();
  159. var fas=thParent.find(".fa");
  160. fas.removeClass("fa-star");
  161. fas.addClass("fa-star-o");
  162. var prevAll=$(this).prevAll();
  163. prevAll.removeClass("fa-star-o");
  164. prevAll.addClass("fa-star");
  165. $(this).removeClass("fa-star-o");
  166. $(this).addClass("fa-star");
  167. var scoreRow=$(this).parents(".scoreRow");
  168. var starNum=0;
  169. if(prevAll[0]){
  170. starNum=prevAll.size();
  171. }
  172. scoreRow.find(".scoreNumInput").val(starNum+1);
  173. runlogic($(this));
  174. validateCheck($(this).parents(".li_surveyQuItemBody"),false);
  175. answerProgressbar($(this));
  176. return false;
  177. });
  178. //表单验证
  179. /**初始化表单骓证配置**/
  180. function validateForms(){
  181. var result=true;
  182. var surveyQuItemBodys=$(".li_surveyQuItemBody");
  183. var firstError=null;
  184. $.each(surveyQuItemBodys,function(){
  185. var quItemBody=$(this);
  186. if(!validateCheck(quItemBody,true)){
  187. //定位到这题
  188. if(firstError==null){
  189. firstError=quItemBody;
  190. }
  191. result=false;
  192. }
  193. });
  194. if(firstError!=null){
  195. $(window).scrollTop(firstError.offset().top);
  196. }
  197. if($("#jcaptchaImgBody").is(":visible")){
  198. var jcaptchaInput = $("input[name='jcaptchaInput']").val();
  199. if(jcaptchaInput===""){
  200. $("#jcaptchaImgBody .errorItem").show();
  201. result = false;
  202. }else{
  203. $("#jcaptchaImgBody .errorItem").hide();
  204. }
  205. }
  206. return result;
  207. }
  208. function checkoutData(checkType, value) {
  209. var validateStatus = true;
  210. if(value.length<=0){
  211. validateStatus = false;
  212. }
  213. if (checkType == "NO") {
  214. if(value.length<=0){
  215. validateStatus = false;
  216. }
  217. }else if (checkType == "EMAIL") {
  218. var __email = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
  219. if (!__email.test(value)) {
  220. validateStatus = false;
  221. }
  222. } else if (checkType == "UNSTRCN") {
  223. var __cn = /^[\u3220-\uFA29]+$/;
  224. if (__cn.test(value)) {
  225. validateStatus = false;
  226. }
  227. } else if (checkType == "STRCN") {
  228. var __cn = /^[\u3220-\uFA29]+$/;
  229. if (!__cn.test(value)) {
  230. validateStatus = false;
  231. }
  232. } else if (checkType == "NUM") {
  233. // "number[/[+|-][int|integer|float|double|money|{位数正则}.{位数正则}]]"
  234. // var __regex = /^\d+(\.\d+)?$/;
  235. var __regex = /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/;
  236. if (!__regex.test(value)) {
  237. validateStatus = false;
  238. }
  239. } else if (checkType == "DIGITS") {
  240. var __regex = /^\d+$/;
  241. if (!__regex.test(value)) {
  242. validateStatus = false;
  243. }
  244. } else if (checkType == "TELENUM") {
  245. var tel = /^\d{3,4}-{1}\d{7,9}-?\d{1,6}$/;
  246. var tel400800 = /^(400{1}-?[0-9]{3}-?[0-9]{4})|(800{1}-?[0-9]{3}-?[0-9]{4})$/
  247. if (!(tel.test(value) || tel400800.test(value))) {
  248. validateStatus = false;
  249. }
  250. } else if (checkType == "PHONENUM") {
  251. var length = value.length;
  252. var mobile = /^(((13[0-9]{1})|(15[0-9]{1})|(17[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
  253. if (!(length == 11 && mobile.test(value))) {
  254. validateStatus = false;
  255. }
  256. } else if (checkType == "TELE_PHONE_NUM") {
  257. var mobile = /^(((13[0-9]{1})|(15[0-9]{1})|(17[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
  258. var tel = /^\d{3,4}-{1}\d{7,9}-?\d{1,6}$/;
  259. var tel400800 = /^(400{1}-?[0-9]{3}-?[0-9]{4})|(800{1}-?[0-9]{3}-?[0-9]{4})$/
  260. if (!(tel400800.test(value) || tel.test(value) || mobile.test(value))) {
  261. validateStatus = false;
  262. }
  263. } else if (checkType == "DATE") {
  264. //日期的正则表达式
  265. /*var reg1 = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/;//2014-01-01
  266. var regExp1 = new RegExp(reg1);
  267. var reg2 = /^(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/;//12:00:00
  268. var regExp2 = new RegExp(reg2);
  269. var reg3 = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/;//2014-01-01 12:00:00
  270. var regExp3 = new RegExp(reg3);
  271. if(!(regExp1.test(value) || regExp3.test(value))){
  272. // alert("日期格式不正确,正确格式为:2014-01-01");
  273. errorType = "DATE";
  274. validateStatus = false;
  275. }*/
  276. if (/Invalid|NaN/.test(new Date(value).toString())) {
  277. validateStatus = false;
  278. }
  279. } else if (checkType == "IDENTCODE") {
  280. var check = /^\d{15}|(\d{17}(\d|x|X))$/.test(value);
  281. if (!(check && (value.length == 15 || value.length == 18))) {
  282. validateStatus = false;
  283. }
  284. } else if (checkType == "ZIPCODE") {
  285. var tel = /^[0-9]{6}$/;
  286. if (!tel.test(value)) {
  287. validateStatus = false;
  288. }
  289. } else if (checkType == "URL"){
  290. var strRegex = /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i;
  291. if (!strRegex.test(value)) {
  292. validateStatus = false;
  293. }
  294. }
  295. return validateStatus;
  296. }
  297. $(".submitSurvey").click(function(){
  298. var btnId = $(this).attr("id");
  299. if(validateForms()){
  300. var thTxt = $(this).val();
  301. if($("#preview_head_top")[0]){
  302. alert("预览模式不可提交!");
  303. return false;
  304. }
  305. if(thTxt==="提交"){
  306. //$(".submitSurvey").parent("div").css({"background-color": "red"});
  307. $('.submitSurvey').attr('disabled',"");
  308. $(".submitSurvey").val("正在提交");
  309. setTimeout(function(){
  310. //$(".submitSurvey").parent("div").css({"background-color": "#373737"});
  311. $('.submitSurvey').removeAttr("disabled");
  312. $('.submitSurvey').val("提交");
  313. },5000);
  314. if(btnId=="previewSubmitSurvey"){
  315. alert("当前为预览模式,不能提交答卷!");
  316. }else{
  317. $("#surveyForm").submit();
  318. }
  319. }else{
  320. alert("5秒内禁止重复提交!");
  321. }
  322. }
  323. return false;
  324. });
  325. var focusFbk=null;
  326. //绑定操作事件
  327. //绑定操作事件
  328. $("#dwSurveyQuContent .dwQuOptionItemContent").unbind();
  329. $("#dwSurveyQuContent .dwQuOptionItemContent").click(function(){
  330. if(focusFbk!=null){
  331. focusFbk.blur();
  332. }
  333. clickItem($(this));
  334. // runlogic($(this).parents(".li_surveyQuItemBody"),$(this));
  335. answerProgressbar($(this));
  336. validateCheck($(this).parents(".li_surveyQuItemBody"),false);
  337. return false;
  338. });
  339. function clickItem(thObj){
  340. var quItemBody=thObj.parents(".li_surveyQuItemBody");
  341. var quType=quItemBody.find(".quType").val();
  342. var dwQuInputLabel=thObj.find(".dwQuInputLabel");
  343. if("RADIO"===quType){
  344. quItemBody.find(".dwQuInputLabel").removeClass("checked");
  345. quItemBody.find("input[type='radio']").prop("checked",false);
  346. thObj.find("input[type='radio']").prop("checked",true);
  347. dwQuInputLabel.addClass("checked");
  348. quItemBody.find(".dwQuOptionItemContent").removeClass("active");
  349. thObj.addClass("active");
  350. runlogic(thObj.find("input[type='radio']"));
  351. }else if("CHECKBOX"===quType){
  352. var thCheckbox = thObj.find("input[type='checkbox']");
  353. if(thCheckbox.prop("checked")){
  354. thObj.find("input[type='checkbox']").prop("checked",false);
  355. dwQuInputLabel.removeClass("checked");
  356. thObj.removeClass("active");
  357. }else{
  358. thObj.find("input[type='checkbox']").prop("checked",true);
  359. dwQuInputLabel.addClass("checked");
  360. thObj.addClass("active");
  361. }
  362. runlogic(thObj.find("input[type='checkbox']"));
  363. }else if("MULTIFILLBLANK"===quType){
  364. var chenRow=thObj.parents(".mFillblankTableTr");
  365. chenRow.find(".dwQuInputLabel").removeClass("checked");
  366. chenRow.find("input[type='radio']").prop("checked",false);
  367. thObj.find("input[type='radio']").prop("checked",true);
  368. dwQuInputLabel.addClass("checked");
  369. }else if("SCALE"===quType){
  370. //单选题
  371. quItemBody.find(".inputchecked").removeClass("inputchecked");
  372. quItemBody.find("input[type='radio']").prop("checked",false);
  373. thObj.find("input[type='radio']").prop("checked",true);
  374. thObj.addClass("inputchecked");
  375. runlogic(thObj.find("input[type='radio']"));
  376. }
  377. }
  378. $(".radioSelect").change(function(){
  379. if(focusFbk!=null){
  380. focusFbk.blur();
  381. }
  382. var thVal = $(this).val();
  383. var thName = $(this).attr("name");
  384. var quCoItemUlLi = $(this).parents("li.quCoItemUlLi");
  385. var quItemInputCase= quCoItemUlLi.find(".quItemInputCase[itemid='"+thVal+"']");
  386. var isNote = quItemInputCase.find(".isNote").val();
  387. if(isNote=="1"){
  388. quCoItemUlLi.find(".dwQuOptionItemNote").hide();
  389. var dwQuOptionItemNote = quCoItemUlLi.find(".dwQuOptionItemNote[name='text_"+thName+"_"+thVal+"']");
  390. dwQuOptionItemNote.show();
  391. }else{
  392. quCoItemUlLi.find(".dwQuOptionItemNote").hide();
  393. }
  394. var thObj = $(this);
  395. var quItemBody = $(this).parents(".li_surveyQuItemBody");
  396. answerProgressbar(thObj);
  397. validateCheck(quItemBody,false);
  398. return false;
  399. });
  400. $(".fillblankInput,.dwMFillblankInput").focus(function(){
  401. focusFbk = $(this);
  402. return false;
  403. });
  404. //填空题
  405. $(".fillblankInput,.dwMFillblankInput").blur(function(){
  406. //$(this).css("borderColor","#D6D6FF");
  407. runlogic($(this));
  408. answerProgressbar($(this));
  409. // validateCheck($(this).parents(".li_surveyQuItemBody"),true);
  410. var thVal=$(this).val();
  411. if(!$(this).hasClass("dateSelector") || thVal!=""){
  412. validateCheck($(this).parents(".li_surveyQuItemBody"),true);
  413. }
  414. focusFbk = null;
  415. });
  416. function resetQuNum(){
  417. var quTitleNums=$(".quTitleNum");
  418. $.each(quTitleNums,function(i,item){
  419. $(this).text((i+1)+"、")
  420. });
  421. }
  422. // resetQuNum();
  423. resetQuNumLogic();
  424. function resetQuNumLogic(){
  425. var surveyQuItemBodys = $(".li_surveyQuItemBody");
  426. var quIndex = 1;
  427. $.each(surveyQuItemBodys,function(i,item){
  428. var thClass = $(this).attr("class");
  429. // var quCoNum = $(this).find(".quCoNum");
  430. var quCoNum = $(this).find(".quTitleNum");
  431. // console.debug(thClass+":"+thClass.indexOf("hidFor"));
  432. if(thClass.indexOf("hidFor")<0 && quCoNum[0]){
  433. quCoNum.html((quIndex++)+"、");
  434. }
  435. });
  436. }
  437. //处理标题因有p标签影响题目序号换行的问题
  438. var quTitleNums=$(".quTitleNum");
  439. $.each(quTitleNums,function(){
  440. var nextObj=$(this).next();
  441. if(nextObj[0]){
  442. var childrens=nextObj.children();
  443. if(childrens[0]){
  444. var firstChildren=childrens.first();
  445. if(firstChildren.is("p")){
  446. $(this).prependTo(firstChildren);
  447. }
  448. }
  449. }
  450. });
  451. /******************************处理题目逻辑设置 **************************************/
  452. //处理题目逻辑设置
  453. /** 答题触发事件 **/
  454. //初始化 处理默认逻辑跳转为显示,则先隐藏元素
  455. var quLogics=$("#dwSurveyQuContent .quLogicItem");
  456. $.each(quLogics,function(){
  457. var loginItem=$(this);
  458. var cgQuItemId=loginItem.find(".cgQuItemId").val();
  459. var skQuId=loginItem.find(".skQuId").val();
  460. var logicId=loginItem.find(".logicId").val();
  461. var logicType=loginItem.find(".logicType").val();
  462. if(logicType==="2"){
  463. //逻辑类型为“显示”2 则初始化为隐藏
  464. var hidQuItemBody=$(".quId[value='"+skQuId+"']").parents(".li_surveyQuItemBody");
  465. hidQuItemBody.hide();
  466. hidQuItemBody.addClass("hidFor"+logicId);
  467. hidQuItemBody.find(".answerTag").attr("disabled",true);
  468. }
  469. });
  470. function runlogic(thFormElementObj){
  471. var quItemBody=thFormElementObj.parents(".li_surveyQuItemBody");
  472. var quLogicItems=quItemBody.find(".quLogicItem");
  473. if(quLogicItems[0]){
  474. var quInputCase=quItemBody.find(".quInputCase");
  475. var quId=quInputCase.find(".quId").val();
  476. var quType=quInputCase.find(".quType").val();
  477. if(quType==="RADIO" || quType==="CHECKBOX"){
  478. var quLgoicItem=null;
  479. var quOptionItems=quItemBody.find(".dwQuOptionItemContent");
  480. $.each(quLogicItems,function(){
  481. var loginItem=$(this);
  482. var cgQuItemId=loginItem.find(".cgQuItemId").val();
  483. var skQuId=loginItem.find(".skQuId").val();
  484. var logicId=loginItem.find(".logicId").val();
  485. var logicType=loginItem.find(".logicType").val();
  486. //过滤优先级
  487. var isbreak=false;
  488. $.each(quOptionItems,function(){
  489. var quCoItem=$(this);
  490. var quInput=null;
  491. var logicStatus=false;
  492. var curQuItemId=null;
  493. if(quType==="RADIO"){
  494. quInput=quCoItem.find("input[type='radio']");
  495. logicStatus=quInput.prop("checked");
  496. curQuItemId=quInput.val();
  497. }else if(quType==="CHECKBOX"){
  498. quInput=quCoItem.find("input[type='checkbox']");
  499. logicStatus=quInput.prop("checked");
  500. curQuItemId=quInput.val();
  501. }
  502. if(curQuItemId===cgQuItemId){
  503. if(logicType==="1"){
  504. if(logicStatus){
  505. skQuestion(quItemBody.next(),skQuId,logicId,function(){
  506. //重新编题号
  507. });
  508. if(skQuId==="1" || skQuId==="2" ){
  509. isbreak=true;
  510. }
  511. }else{
  512. var hidQuItemBodys=$(".hidFor"+logicId);
  513. $(".hidFor"+logicId).removeClass("hidFor"+logicId);
  514. var curPageNo = quItemBody.find(".pageNo").val();
  515. $.each(hidQuItemBodys,function(){
  516. var thQuItemBodyClass=$(this).attr("class");
  517. var thPageNo = $(this).find(".pageNo").val();
  518. if(thQuItemBodyClass.indexOf("hidFor")<0 && thPageNo==curPageNo){
  519. $(this).show();
  520. //$(".hidFor"+loginId).fadeIn();
  521. //回答标记与逻辑设置没有关系
  522. $(this).find(".answerTag").attr("disabled",false);
  523. }
  524. });
  525. }
  526. }else{
  527. if(logicStatus){
  528. var hidQuItemBodys=$(".hidFor"+logicId);
  529. $(".hidFor"+logicId).removeClass("hidFor"+logicId);
  530. var curPageNo = quItemBody.find(".pageNo").val();
  531. $.each(hidQuItemBodys,function(){
  532. var hidQuItemBody = $(this);
  533. var hidQuId = $(this).find(".quId").val();
  534. if(quType=="CHECKBOX" || quType=="RADIO"){
  535. $.each(quLogicItems,function() {
  536. var thLoginItem = $(this);
  537. var thSkQuId = thLoginItem.find(".skQuId").val();
  538. var thLogicType = thLoginItem.find(".logicType").val();
  539. var thLogicId=thLoginItem.find(".logicId").val();
  540. var logicHidForClass = "hidFor"+thLogicId;
  541. // console.debug(logicHidForClass);
  542. if(thLogicType==="2" && thSkQuId===hidQuId){
  543. hidQuItemBody.removeClass(logicHidForClass);
  544. }
  545. });
  546. }
  547. var thQuItemBodyClass=$(this).attr("class");
  548. var thPageNo = $(this).find(".pageNo").val();
  549. if(thQuItemBodyClass.indexOf("hidFor")<0 && thPageNo==curPageNo){
  550. $(this).show();
  551. $(this).find(".answerTag").attr("disabled",false);
  552. }
  553. });
  554. }else{
  555. /* 隐藏题
  556. */
  557. var isHide = true;
  558. if(quType=="CHECKBOX" || quType=="RADIO"){
  559. //先判断有没有逻辑已经触发了
  560. $.each(quLogicItems,function() {
  561. var thLoginItem = $(this);
  562. var thCgQuItemId=thLoginItem.find(".cgQuItemId").val();
  563. var thSkQuId = thLoginItem.find(".skQuId").val();
  564. var thLogicType = thLoginItem.find(".logicType").val();
  565. var thLogicId=thLoginItem.find(".logicId").val();
  566. if( thLogicType==="2" && thSkQuId === skQuId ){
  567. var thCgQuOptionItem=quItemBody.find(".dwQuOptionItemContent input[type='checkbox'][value='"+thCgQuItemId+"'],.dwQuOptionItemContent input[type='radio'][value='"+thCgQuItemId+"']");
  568. var thCgQuOptionStatus=thCgQuOptionItem.prop("checked");
  569. if(thCgQuOptionStatus){
  570. isHide = false;
  571. return false;
  572. }
  573. }
  574. });
  575. }
  576. if(isHide){
  577. var hidQuItemBody=$(".quId[value='"+skQuId+"']").parents(".li_surveyQuItemBody");
  578. hidQuItemBody.hide();
  579. hidQuItemBody.addClass("hidFor"+logicId);
  580. hidQuItemBody.find(".answerTag").attr("disabled",true);
  581. }
  582. }
  583. }
  584. return false;
  585. }
  586. });
  587. if(isbreak){
  588. return false;
  589. }
  590. });
  591. }else if(quType==="FILLBLANK"){
  592. //遍历每个逻辑设置
  593. var quOptionItems=quItemBody.find(".dwQuOptionItemContent");
  594. var thVal=thFormElementObj.val();
  595. $.each(quLogicItems,function(){
  596. var loginItem=$(this);
  597. var cgQuItemId=loginItem.find(".cgQuItemId").val();
  598. var skQuId=loginItem.find(".skQuId").val();
  599. var logicId=loginItem.find(".logicId").val();
  600. var logicType=loginItem.find(".logicType").val();
  601. if(logicType==="1"){
  602. //跳转
  603. if(thVal!=""){
  604. //逻辑选项被选中状态,激活状态
  605. skQuestion(quItemBody.next(),skQuId,logicId,function(){
  606. //重新编题号
  607. });
  608. if(skQuId==="1" || skQuId==="2" ){
  609. isbreak=true;
  610. }
  611. }else{
  612. //逻辑选项未被选中状态,未激活
  613. //$(".hidFor"+loginId).slideDown("slow");
  614. var hidQuItemBodys=$(".hidFor"+logicId);
  615. $(".hidFor"+logicId).removeClass("hidFor"+logicId);
  616. var curPageNo = quItemBody.find(".pageNo").val();
  617. $.each(hidQuItemBodys,function(){
  618. var thQuItemBodyClass=$(this).attr("class");
  619. var thPageNo = $(this).find(".pageNo").val();
  620. if(thQuItemBodyClass.indexOf("hidFor")<0 && thPageNo==curPageNo){
  621. $(this).show();
  622. //$(".hidFor"+loginId).fadeIn();
  623. //回答标记与逻辑设置没有关系
  624. $(this).find(".answerTag").attr("disabled",false);
  625. }
  626. });
  627. }
  628. }else{
  629. //显示
  630. //逻辑类型为“显示” quType=1
  631. if(thVal!=""){
  632. //逻辑选项被选中状态,激活状态 显示题
  633. var hidQuItemBodys=$(".hidFor"+logicId);
  634. $(".hidFor"+logicId).removeClass("hidFor"+logicId);
  635. var curPageNo = quItemBody.find(".pageNo").val();
  636. $.each(hidQuItemBodys,function(){
  637. var thQuItemBodyClass=$(this).attr("class");
  638. var thPageNo = $(this).find(".pageNo").val();
  639. if(thQuItemBodyClass.indexOf("hidFor")<0 && thPageNo==curPageNo){
  640. $(this).show();
  641. $(this).find(".answerTag").attr("disabled",false);
  642. }
  643. });
  644. }else{
  645. /* 隐藏题
  646. */
  647. var hidQuItemBody=$(".quId[value='"+skQuId+"']").parents(".li_surveyQuItemBody");
  648. hidQuItemBody.hide();
  649. hidQuItemBody.addClass("hidFor"+logicId);
  650. hidQuItemBody.find(".answerTag").attr("disabled",true);
  651. }
  652. }
  653. });
  654. }
  655. resetQuNumLogic();
  656. }
  657. }
  658. resetQuNumLogic();
  659. function skQuestion(nextQuItemBody,skQuId,logicId,callback){
  660. if(nextQuItemBody[0]){
  661. //submitSurveyBtn
  662. var nextQuType=nextQuItemBody.find(".quType").val();
  663. var nextQuId=nextQuItemBody.find(".quId").val();
  664. var nextAnswerTag=nextQuItemBody.find(".answerTag");
  665. //如果是新一页则显示当前页所有题
  666. if(nextQuType=="PAGETAG"){
  667. if(validateForms()) {
  668. nextQuItemBody.find(".nextPage_a").click();
  669. }
  670. }
  671. //var quType=quItemBody.find(".quType").val();
  672. //var quId=quItemBody.find(".quId").val();
  673. //判断跳转类型
  674. if(skQuId==null){
  675. //对于逻辑选项未被选中的情况
  676. }else if(nextQuType=="PAGETAG" ){
  677. skQuestion(nextQuItemBody.next(),skQuId,logicId,function(){
  678. });
  679. }else if(nextQuType!="submitSurveyBtn" && nextQuType!="PAGETAG" && (skQuId==="1" || skQuId==="2" || nextQuId!=skQuId) ){
  680. //对于逻辑项是被选定的情况下
  681. nextAnswerTag.attr("disabled",true);
  682. //nextQuItemBody.slideUp("slow");
  683. nextQuItemBody.hide();
  684. //nextQuItemBody.fadeOut();
  685. nextQuItemBody.addClass("hidFor"+logicId);
  686. skQuestion(nextQuItemBody.next(),skQuId,logicId,function(){
  687. });
  688. }
  689. /*
  690. else if(nextQuItemBody.is(":hidden")){
  691. skQuestion(nextQuItemBody.next(),skQuId,logicId,function(){
  692. });
  693. }else if(nextQuType!="submitSurveyBtn" && nextQuType!="PAGETAG" && (skQuId==="1" || skQuId==="2" || nextQuId!=skQuId) ){
  694. //对于逻辑项是被选定的情况下
  695. nextAnswerTag.attr("disabled",true);
  696. //nextQuItemBody.slideUp("slow");
  697. nextQuItemBody.hide();
  698. //nextQuItemBody.fadeOut();
  699. nextQuItemBody.addClass("hidFor"+logicId);
  700. skQuestion(nextQuItemBody.next(),skQuId,logicId,function(){
  701. });
  702. }
  703. */
  704. }else{
  705. callback();
  706. }
  707. }
  708. /*
  709. $("#dwSurveyQuContent .dwQuOptionItemContent").hover(function(){
  710. $(this).css({"border-color":"#1e94fc"});
  711. $(this).css({"background":"rgb(227, 237, 249)"});
  712. },function(){
  713. if(!($(this).hasClass("active") || $(this).hasClass("inputchecked"))){
  714. $(this).css({"border-color":"rgb(199, 225, 247)"});
  715. $(this).css({"background":"rgb(255, 255, 255)"});
  716. }
  717. });
  718. */
  719. bindDateEvent();
  720. });
  721. /**********************处理答题进度条************************/
  722. //$("#resultProgress").progressbar({value: bfbFloat});
  723. function answerProgressbar(thObj){
  724. var quItemBody=thObj.parents(".li_surveyQuItemBody ");
  725. var quType=quItemBody.find(".quType").val();
  726. if(quType==="RADIO"){
  727. //quItemBody.find(".answerTag").val(1);
  728. var checks=quItemBody.find("input[type='radio']:checked");
  729. if(checks[0]){
  730. quItemBody.find(".answerTag").val(1);
  731. }else{
  732. quItemBody.find(".answerTag").val(0);
  733. }
  734. }else if(quType=="CHECKBOX"){
  735. var checks=quItemBody.find("input[type='checkbox']:checked");
  736. if(checks[0]){
  737. quItemBody.find(".answerTag").val(1);
  738. }else{
  739. quItemBody.find(".answerTag").val(0);
  740. }
  741. }else if(quType==="FILLBLANK"){
  742. var thVal=thObj.val();
  743. if(thVal!=""){
  744. quItemBody.find(".answerTag").val(1);
  745. }else{
  746. quItemBody.find(".answerTag").val(0);
  747. }
  748. }else if(quType==="ORDERQU"){
  749. //quOrderByLeftUl
  750. var orderByLabels=quItemBody.find(".quOrderByLeftUl label");
  751. if(!orderByLabels[0]){
  752. quItemBody.find(".answerTag").val(1);
  753. }else{
  754. quItemBody.find(".answerTag").val(0);
  755. }
  756. }else if( quType==="SCORE" ){
  757. var quScoreOptionTr=thObj.parents(".quScoreOptionTr");
  758. var scoreNumInput=quScoreOptionTr.find(".scoreNumInput");
  759. if(scoreNumInput.val()!=""){
  760. quScoreOptionTr.find(".answerTag").val(1);
  761. }else{
  762. quScoreOptionTr.find(".answerTag").val(0);
  763. }
  764. }else if(quType==="MULTIFILLBLANK"){
  765. var mFillblankTableTr=thObj.parents(".mFillblankTableTr");
  766. if(thObj.val()!=""){
  767. mFillblankTableTr.find(".answerTag").val(1);
  768. }else{
  769. mFillblankTableTr.find(".answerTag").val(0);
  770. }
  771. }
  772. var totalQuSize=$("#dwSurveyQuContent .answerTag:enabled").size();
  773. var answerTag1=$("#dwSurveyQuContent .answerTag[value='1']:enabled");
  774. var answerQuSize=0;
  775. if(answerTag1[0]){
  776. answerQuSize=answerTag1.size();
  777. }
  778. var newValue = parseInt(answerQuSize/totalQuSize*100);
  779. $("#resultProgressRoot .progress-label").text("完成度:"+newValue+"%");
  780. $("#resultProgress").progressbar("option", "value", newValue);
  781. }
  782. function validateCheck(quItemBody,isSubForm){
  783. if(quItemBody.is(":visible")){
  784. var quId=quItemBody.find(".quId").val();
  785. var quType=quItemBody.find(".quType").val();
  786. var isRequired=quItemBody.find(".isRequired").val();
  787. var validateStatus=false;
  788. var checkType = "";
  789. var errorMsg = null;
  790. if(isRequired==="0"){
  791. validateStatus = true;
  792. return true;
  793. }
  794. if(quType==="RADIO"){
  795. var hv = quItemBody.find(".hv").val();
  796. if(hv=="4"){
  797. var radioSelectVal = quItemBody.find("select.radioSelect").val();
  798. if(radioSelectVal!="" && radioSelectVal!="0"){
  799. var radioSelect = quItemBody.find(".radioSelect");
  800. var radioSelectVal = radioSelect.val();
  801. var radioSelectName = radioSelect.attr("name");
  802. var quCoItemUlLi = radioSelect.parents("li.quCoItemUlLi");
  803. var quItemInputCase= quCoItemUlLi.find(".quItemInputCase[itemid='"+radioSelectVal+"']");
  804. var isNote = quItemInputCase.find(".isNote").val();
  805. if(isNote=="1"){
  806. var curText = quCoItemUlLi.find(".dwQuOptionItemNote[name='text_"+radioSelectName+"_"+radioSelectVal+"']");
  807. var curTextValue = curText.val();
  808. var checkType = quItemInputCase.find(".checkType").val();
  809. var isRequiredFill = quItemInputCase.find(".isRequiredFill").val();
  810. if(isRequiredFill=="1" || curTextValue!="") {
  811. validateStatus = checkoutData(checkType, curText);
  812. }else{
  813. validateStatus = true;
  814. }
  815. }else{
  816. validateStatus = true;
  817. }
  818. }
  819. }else{
  820. validateStatus=quItemBody.find("input[type='radio']:checked")[0];
  821. if(validateStatus){
  822. var curRadio = quItemBody.find("input[type='radio']:checked");
  823. var curText = curRadio.parents(".dwQuOptionItemContent").find("input[type='text']:visible");
  824. if(curText[0]){
  825. var curTextValue = curText.val();
  826. checkType = curRadio.parents(".dwQuOptionItemContent").find(".checkType").val();
  827. var isRequiredFill = curRadio.parents(".dwQuOptionItemContent").find(".isRequiredFill").val();
  828. if(isRequiredFill!="1"){
  829. validateStatus = checkoutData(checkType, curTextValue);
  830. }
  831. }
  832. }
  833. }
  834. }else if(quType==="CHECKBOX"){
  835. validateStatus=quItemBody.find("input[type='checkbox']:checked")[0];
  836. var paramInt01 = quItemBody.find(".paramInt01").val();
  837. if(paramInt01>0){
  838. /*var checkeds = quItemBody.find("input[type='checkbox']:checked");
  839. if(checkeds[0]&&checkeds.size()<paramInt01){
  840. errorMsg = "请保证最少选择"+paramInt01+"项内容";
  841. validateStatus = false;
  842. }*/
  843. }
  844. if(validateStatus){
  845. // isNote checkType isRequiredFill
  846. var curCheckboxs = quItemBody.find("input[type='checkbox']:checked");
  847. $.each(curCheckboxs,function(){
  848. var curText = $(this).parents(".dwQuOptionItemContent").find("input[type='text']:visible");
  849. if(curText[0]){
  850. var curTextValue = curText.val();
  851. checkType = $(this).parents(".dwQuOptionItemContent").find(".checkType").val();
  852. var isRequiredFill = $(this).parents(".dwQuOptionItemContent").find(".isRequiredFill").val();
  853. if(isRequiredFill!="1"){
  854. validateStatus = checkoutData(checkType, curTextValue);
  855. }
  856. }
  857. if(!validateStatus){
  858. return false;
  859. }
  860. });
  861. }
  862. }else if(quType==="FILLBLANK"){
  863. var value = quItemBody.find(".fillblankInput").val();
  864. validateStatus = value!="";
  865. checkType = quItemBody.find(".checkType").val();
  866. if(validateStatus){
  867. validateStatus = checkoutData(checkType, value);
  868. }
  869. }else if(quType==="ORDERQU"){
  870. //quItemBody.find(".quOrderByLeftUl label");
  871. validateStatus=!quItemBody.find(".quOrderItemHidInput[value='']")[0];
  872. }else if(quType==="SCORE"){
  873. validateStatus=true;
  874. var quScoreOptionTrs=quItemBody.find(".quScoreOptionTr");
  875. $.each(quScoreOptionTrs,function(){
  876. var scoreNumInput=$(this).find(".scoreNumInput");
  877. if(scoreNumInput.val()===""){
  878. validateStatus=false;
  879. return false;
  880. }
  881. });
  882. }else if(quType==="MULTIFILLBLANK"){
  883. validateStatus=true;
  884. var quScoreOptionTrs=quItemBody.find(".mFillblankTableTr");
  885. $.each(quScoreOptionTrs,function(){
  886. var scoreNumInput=$(this).find(".dwMFillblankInput");
  887. if(scoreNumInput.val()===""){
  888. validateStatus=false;
  889. }
  890. if(validateStatus){
  891. var curTextValue = scoreNumInput.val();
  892. checkType = $(this).parents(".mFillblankTableTr").find(".checkType").val();
  893. validateStatus = checkoutData(checkType, curTextValue);
  894. }
  895. if(!validateStatus){
  896. return false;
  897. }
  898. });
  899. }else if(quType==="submitSurveyBtn" || quType==="PARAGRAPH" || quType==="PAGETAG"){
  900. return true;
  901. }
  902. }else{
  903. validateStatus=true;
  904. }
  905. if(validateStatus){
  906. quItemBody.find(".errorItem").remove();
  907. }else{
  908. /*if(isSubForm && !quItemBody.find(".errorItem")[0]){
  909. var errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请检查题目答案,为必答项!</label></div>";
  910. quItemBody.find(".surveyQuItemContent").append(errorHtml);
  911. }*/
  912. if(isSubForm){
  913. if(quItemBody.find(".errorItem")[0]){
  914. quItemBody.find(".errorItem").remove();
  915. }
  916. var errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请检查题目答案,为必答项!</label></div>";
  917. if(errorMsg!=null){
  918. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">"+errorMsg+"</label></div>";
  919. }else{
  920. if(checkType=="EMAIL"){
  921. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入Email,为必答项!</label></div>";
  922. }else if(checkType=="UNSTRCN"){
  923. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入非中文字符,为必答项!</label></div>";
  924. }else if(checkType=="STRCN"){
  925. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入中文字符,为必答项!</label></div>";
  926. }else if(checkType=="NUM"){
  927. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入数字,为必答项!</label></div>";
  928. }else if(checkType == "DIGITS"){
  929. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入整数,为必答项!</label></div>";
  930. }else if(checkType == "TELENUM"){
  931. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入电话,为必答项!</label></div>";
  932. }else if(checkType == "PHONENUM"){
  933. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入手机,为必答项!</label></div>";
  934. }else if(checkType == "TELE_PHONE_NUM"){
  935. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入电话或手机,为必答项!</label></div>";
  936. }else if(checkType == "DATE"){
  937. //2014-01-01 12:00:00
  938. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入日期时间类型,为必答项!</label></div>";
  939. }else if(checkType == "IDENTCODE"){
  940. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入身份证号,为必答项!</label></div>";
  941. }else if(checkType == "ZIPCODE"){
  942. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入邮编,为必答项!</label></div>";
  943. }else if(checkType == "URL"){
  944. errorHtml="<div class=\"errorItem\"><label for=\"\" class=\"error\">请输入URL,为必答项!</label></div>";
  945. }
  946. }
  947. quItemBody.find(".surveyQuItemContent").append(errorHtml);
  948. }
  949. }
  950. return validateStatus;
  951. }
  952. }
  953. function refreshAutoCode(codeImgId){
  954. var ctx = $("#ctx").val();
  955. $("#"+codeImgId).attr("src",ctx+"/jcaptcha.action");
  956. }