人生与戏

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
// 报错语句再次整合。 以下很多函数调用了这里的简化版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() ){ ,另外strim是一个自创去空格的函数
if( f(QID).toBoolean() ){
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; } } }

 

posted on 2020-10-21 14:43  人生与戏  阅读(208)  评论(0编辑  收藏  举报