1. 程式人生 > 實用技巧 >confirmit中自創相應函式

confirmit中自創相應函式

// 報錯語句再次整合。 以下很多函式呼叫了這裡的簡化版err()報錯函式。
function err(para){
  RaiseError();
  ClearErrorMessage();
  SetQuestionErrorMessage(CurrentLang(), para);
}

// loop_id : loop題 的id
// 作用:loop下的題計數,出示第幾個了。 返回 第幾個的值
function count(loop_id){
    var codes_arr=f(loop_id).domainValues();
    for(var i=0; i<codes_arr.length; i++){
        
if(f(loop_id).value()==codes_arr[i]){ return i+1; } } } // loopQus:loop題id // QUS:loop題下的出示的題id // code: QUS選中的單個code // 作用:獲取LOOP題 選中code的集合品牌 // 在此QUS:單選題,code: 單個code值。 // 如果QUS: 多選題,code引數要去掉,函式裡的code引數換成類似 '1','3','4' function getLoop(loopQus, QUS, code) { var loopcode = f(loopQus).domainValues();
var oset = new Set(); for (var i = 0; i < loopcode.length; i++) { if (f(QUS, loopcode[i]).any(code)) { oset.add(loopcode[i]); } } return oset; } // string: 傳入的字串。 // 作用:正則表示式去空格,返回清除空格後的字串 function strim_ldx(string){ return string.replace(/\s/g,''); } // QID: grid題號, error_statement: 報錯語句
// 如果 grid左側和上方的選項個數都大於 1 , 則可以去掉left 和 top變數的相關程式碼 function checkGridLine(QID,error_statement) { if( !QuestionErrors() ){ // grid左側選項code var left=f(QID).domainValues(); // grid上方選項code var top=f(QID)[left[0]].domainValues(); if (lset(f(QID).values()).size() == 1 && left.length>1 && top.length>1) { RaiseError(); ClearErrorMessage(); SetQuestionErrorMessage(CurrentLang(), error_statement); } } } /*
check 是一個輔助單選題,作用是充當提醒變數使用,初始設定check自動圈選code==1,
當某題 達到提醒條件時,並且判斷check是否選中1,如果是則輸出報錯(提醒)語句,並且check選中2.
如果使用者不改,那麼不再輸出報錯(提醒)語句,同時check 回到初始狀態選中code==1。
*/
// 軟的直線報錯:報錯一次可以過 function checkGridLineSoft(QID,error_statement) { if( !QuestionErrors() ){ if (lset(f(QID).values()).size() == 1 && f('check').any('1')) { f('check').set('2'); err(error_statement); }else{ f('check').set('1'); } } } // QID,error_statement,n // grid題id, 報錯語句, 數量 // Grid 題型:連續選擇n個及以上相同的答案報錯 function checkGridLine2(QID,error_statement,n) { if( !QuestionErrors() ){ var val = f(QID).values(); for (var i = 0; i < val.length - n + 1; ++i) { if (lset(val.slice(i, i + n)).size() == 1 ) { err(error_statement) break; } } } } // Grid 題型:連續選擇n個及以上相同的答案/ 報錯一次 function checkGridLineSoft2(QID, error_statement, n) { if (!QuestionErrors()) { var val = f(QID).values(); for (var i = 0; i < val.length - n + 1; ++i) { if (lset(val.slice(i, i + n)).size() == 1 && f('check').any('1')) { f('check').set('2'); err(error_statement) break; } else { f('check').set('1') } } } } // arr: multi grid左側的codes組成的陣列; QID: multi grid題號; error_statement: 報錯語句 function checkMultiGridLine(arr,QID,error_statement){ var leftCodes=arr; var r=new Set(); for(var i=0; i<leftCodes.length; i++){ r.add(f(QID+'_'+leftCodes[i]).values()); } /* 如果確定multi 左邊和上方出示的code的數量 > 1 ,則下方if 條件中只用 r.size()==1 判斷即可 */ if(r.size()==1 && leftCodes.length>1 && f(QID+'_'+leftCodes[0]).domainValues().length>1){ err(error_statement) } } // arr: multi grid左側的codes組成的陣列; QID: multi grid題號; error_statement: 報錯語句 // 軟報錯:報錯一次 function checkMultiGridLineSoft(arr,QID,error_statement){ var leftCodes=arr; var r=new Set(); for(var i=0; i<leftCodes.length; i++){ r.add(f(QID+'_'+leftCodes[i]).values()); } if(r.size()==1 && f('check').any('1')){ f('check').set('2'); err(error_statement); }else { f('check').set('1'); } } // arr: multi grid左側的codes組成的陣列; QID: multi grid題號; error_statement: 報錯語句, n: n個連續的答案一致 // Multi Grid 題型:連續選擇n個及以上相同的答案報錯 function checkMultiGridLine2(arr,QID,error_statement,n) { if( !QuestionErrors() ){ var leftCodes=arr; for (var i = 0; i < leftCodes.length - n+1; ++i) { var r=new Set(); for (var m = i; m < i + n; ++m) { r.add(f(QID+'_' + leftCodes[m]).values()); } if (r.size() == 1) { err(error_statement) } } } } // Multi Grid 題型:連續選擇n個及以上相同的答案/ 報錯一次 function checkMultiGridLineSoft2(arr,QID, error_statement, n) { if (!QuestionErrors()) { var leftCodes=arr; var count=0; for (var i = 0; i < leftCodes.length - n+1; ++i) { var r=new Set(); for (var m = i; m < i + n; ++m) { r.add(f(QID+'_' + leftCodes[m]).values()); } if(r.size()==1){ count++; } } if (count>0 && f('check').any('1')) { f('check').set('2'); err(error_statement); }else { f('check').set('1') } } } // 家庭月總收入 選項 >= 個人月收入 // A: 個人收入題id ; B: 家庭收入題id function AtoB(A,B) { var allCodes = a(B).members(), needCodes = new Set(); for (var i = 0; i < allCodes.length; ++i) { if (allCodes[i] >= f(A).toNumber()) { needCodes.add(allCodes[i]); } } return needCodes; } /* QSOPEN: 單獨填空題; QSSAMPLE:多個名稱的多選題; QSSING: 單獨填空題內容符合某個名稱被賦值的單選題 */ function singleOpenToEndByBrand(QSOPEN,QSSAMPLE,QSSING){ var content=f(QSOPEN).get(); var SampleCodes=f(QSSAMPLE).domainValues(); for(var i=0;i<SampleCodes.length;i++){ var code=SampleCodes[i]; var codeLabel=f(QSSAMPLE)[code].label(); /* 這裡的分隔符為 中文 的 逗號 */ var LabelArr=codeLabel.split(','); for(var j=0;j<LabelArr.length;j++){ if(strim(content).toLowerCase()==strim(LabelArr[j].toLowerCase())){ // 單獨填空題內容符合某個名稱被賦值的 單 選題使用以下程式碼 f(QSSING).set(code); // 單獨填空題內容符合某個名稱被賦值的 多 選題使用以下程式碼 // f(QSSING)[code].set('1'); } } } } /* QSOPEN: 多填空題; QSSAMPLE:多個名稱的多選題; QMMULTI: 多填空題內容符合某個名稱被賦值的多選題 */ function multiOpenToEndByBrand(QSOPEN,QSSAMPLE,QMMULTI){ var openCodes=f(QSOPEN).categories(); for(var k=0; k<openCodes.length; k++){ var content=f(QSOPEN)[openCodes[k]].get(); var SampleCodes=f(QSSAMPLE).domainValues(); for(var i=0;i<SampleCodes.length;i++){ var code=SampleCodes[i]; var codeLabel=f(QSSAMPLE)[code].label(); /* 這裡的分隔符為 中文 的 逗號 */ var LabelArr=codeLabel.split(','); for(var j=0;j<LabelArr.length;j++){ if(strim(content).toLowerCase()==strim(LabelArr[j].toLowerCase())){ f(QMMULTI)[code].set('1'); } } } } } // 清楚字串空格函式 function strim(string) { var tempstr; tempstr = string.replace(/(^\s+)|(\s+$)/g, ""); // delete spaces tempstr = tempstr.replace(/(^ +)|( +$)/g, ""); // delete 2-byte spaces return tempstr; } // 單開放題檢查是否為空值/空格 function sOpenCheckNull(QID){ if( !QuestionErrors() ){ if (strim(f(QID).get()) == '') { RaiseError(); ClearErrorMessage(); SetQuestionErrorMessage(CurrentLang(), "請不要輸入空值,謝謝!"); } } } // 單開放題 檢查是否 包含漢字或字母(拼音) // 如果輸入的para包含漢字或字母 就返回 true,否則返回false function haveEandC(para) { var re=/[a-zA-Z | \u4e00-\u9fa5]/; //包含漢字或字母(拼音) return re.test(para); } // 多開放題檢查是否 包含漢字或字母(拼音),附帶報錯語句 function eAndC(qId){ if(!QuestionErrors()){ var codes=f(qId).categories(); for(var i=0; i<codes.length; i++){ if(!haveEandC(f(qId)[codes[i]].get())){ err('請填寫漢字或拼音!') ; break; } } } } /* 是否按順序填寫: 通過連續的兩個作比較,判斷是否前一個沒填內容&&後一個填了內容 */ function openSort(QID) { var codes = f(QID).domainValues(); for (var i = 0; i < codes.length - 1; i++) { if (!f(QID)[codes[i]].toBoolean() && f(QID)[codes[i + 1]].toBoolean()) { RaiseError(); ClearErrorMessage(); SetQuestionErrorMessage(CurrentLang(), "請按順序填寫,謝謝"); break; } } }