人生与戏

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Html Styles下任意一个复制样式系统命名的问题:

 

 

 当某个题中某个元素需要单独设置CSS样式时,复制一份全局样式后,引用复制的那个样式scale (2)会失效。
原因:系统默认生成的这个class名称其实是两个class名称( class="scale   (2)" )  , 所以我们引用这个样式会失效。
解决方案:自己手动改个合适的单独的class名称。


 

手机端不能直接给input设置disabled属性:

confirmit中由于PC端和手机端的某些设置不一样,导致部分代码在手机端执行后无效果。

<input type="radio" name="q88_1" id="q88_1_1" value="1">

 <label id="q88_1_1_label">1</label>


在PC端中,以上两个标签都存在, 可以给PC端中的input设置disabled。 

但是在手机端中, input 被设置为display:none;   而图中的单选框其实背景图


 

创建的 if 判断条件的区别:

在正常的  if( statement ) { /* 执行的代码块 */ }  中  , statement : 最终会转换为 Boolean 值( true 或 false ) 来判断是否要执行其下的代码。

但是在confirmit中, 创建的 if 判断条件 不能是单个的 数字 或 字符串。 

当只获取A1选中的个数(不管是0 ,还是1等)时,这里是不会将其转换为 false 或  ture ,  因而 i37题 在此类判断条件下 永远不会执行。

记录于2020/09/23 . 如果后期哪位好友发现在此可以使用  f('A1').size() 当作判断条件时,此笔记可以退休了,哈哈。


 

调用方法生成的数组调用sort(含有随机排序函数参数)的区别: 

在正常的array.sort() 中, 调用sort() 方法会改变 原数组,不会创建副本, 就算sort() 中含有 函数参数也一样只改变原数组,

但是在confitmit平台中 你最好定义一个变量接收 随机排序后的新数组。(特殊情况下不会改变原数组,会生成一个新数组)。

 在第二张图中可以清晰的看到,当调用该平台的数组使用 sort('随机函数') 时,没有改变原数组, 因此在此定义了一个新变量接收新数组。

注意: 目前只有该平台调用的数组 使用 含有随机排序函数 参数  的sort() 方法才会不改变原 数组。

意思就是: 如果使用第一张图中的 第8行的数组, 调用sort('随机函数') 也还是只改变原数组。

     如果使用第一张图中的 第9 / 10 行类似的数组, 调用sort('随机函数') 不会改变原数组, 会生成一个副本, 所以要用新变量接收它。

记录于 2020/09/23 ,还有好多不一样的,慢慢记录下来,哈哈。 


 

confirmit中any()方法参数问题:

confirmit中any()方法的参数目前最终只能是字符串形式。不过有种特殊的情况。

 数字的话会报错,比如报错信息:CODED A1 does not implement any function

特殊情况:


 

confitmit中none()方法:

举例: 

f('A1').none('1','2','3')

用法:如果A1题没有选中1&&2&&3返回 true  ,  否则返回 false .

其中 none() 方法包括 此题没有回答(==没有选中指定参数),在添加逻辑代码时要注意是否要加上此题被回答的条件: f('A1').toBoolean().

/* 简单: 只考虑 A1 题的code=1,2,3 都没选 */
f('A1').none('1','2','3')

/* 复杂: 考虑A1题被回答了 且 A1 题的code=1,2,3 都没选 ;(简而言之就是A1题选中了其它选项)*/
f('A1').toBoolean() && f('A1').none('1','2','3')


confirmit中indexOf()方法:
来,先看个两个截图

而且如果在confirmit平台中使用了indexOf()方法,会有两种报错提醒~o.o~!

第一种:Error in QuestionValidationCode : Objects of type 'Firmglobal.Confirmit.SurveyEngine.Common.SurveyArrayList' do not have such a member 

 

 第二种:Error in validation script [B1]: Function expected


 

confirmit中 domainValues() 方法:

先来看下domainValues()方法的定义:

中文大致翻译下: domainValues() 方法返回出示(显示)选项 对应的 code 数组。如果出示的选项随机了, 那么返回的codes也是随机对应的

举例: 有四个选项 a ,b ,c , d 。 各自对应的code 为 1 ,2,3,4。

当只出示 a, c , d 三个选项时,domainValues() 返回的codes 只有由 1,3,4 这三个code组成的数组。

当随机出示的顺序为  a , c , d , b。  domainValues() 返回的codes 为  [ 1,3,4,2] 。


 

confirmit中3Dgrid题手机端的bug

3Dgrid题手机端的bug导致  点击 ‘下一页’ 无效 , 不能进入下一页。

先看个图:

在这个图中, g332中的选项 含有分组 的选项, 其中含有 other 的选项, q333 和 q334 的masking由 g331 选项决定。g332下的题(指q333等)超过 1个 ,   在手机端答题到 q331 或 g332 题被卡死,点击 ‘下一页’ 不能跳转的 概率 高达 99.9%。  至今都是失败!

记录于 2020/11/09 ,或许在接下来的某个时间里 confirmit 平台的开发维护人员会修复这个bug 吧。

我又回来啦, 前几天又碰到过这个bug, 经过同事的指点,又是一番测试, 最终定位到 bug 产生的两大必要条件:3Dgrid(例如:g332) 中有分组, 子题(例如:q333,q334)的masking中 有出示此题的条件

记录于 2020/12/07 。 

这个还是三个必要条件,详情请看 https://www.cnblogs.com/FlyingLiao/p/13949471.html


 

confirmit中GetLeastFilledQuotaCodes()方法:

GetLeastFilledQuotaCodes(quotaName, n, codesArr):

  quotaName:配额名称

  n: 挑选n个配额最小的选项

  codesArr: 选中选项的code数组

举例:从q37中挑选一个最小配额的选项放入q38。

f("q38").set(GetLeastFilledQuotaCodes('quota_q38', 1, f('q37').categories()).toString());

优点: 直接调用函数实现 获取挑选n个配额最小的选项,高效快捷。

缺点:1.在正常的上线链接和测试短链接中正常使用,但是用测试长链接和在内部测试时 你将看不到q38有值,系统会给你发封邮件提醒你数据存储成功。

      2. 如果有其它题目与这个配额题作交叉,那这个函数就不是最佳的挑选最小配额的函数。

/* 挑选3个  */
f("q38").set(GetLeastFilledQuotaCodes('quota_q38', 3, f('q37').categories()));

 记录于 2020/12/15 。 


 

confirmit中code的命名:

code的命名定义:Codes can only contain alphanumeric characters, with no white space.

定义中明确规定不允许空格,但是实际输入(包含复制code进去时含有空格)空格会有两种结果:

假设A1题的code==5有空格:

  1.  会出现报错语句: Following values were illegal: - 5 。

  2.  不会出现报错语句, 空格会保留。

当出现报错语句时去掉空格就没事了; 当没出现报错语句时,恰好 Validation 中或者 其它题目调用了 code==5, 例如:

if (f('A1').any('5')) {
    /* 要执行的代码块 */
}

那么 就不会执行其中的代码块。

再举个例子, 当A1的code==5 有空格, A2 的code==5 没空格, A1、A2的逻辑是 如果A1 选中5,那么A2 就出示code==5的选项。

实际情况是A1 选中5 , A2 不会出示code==5的选项。

记录于 2020/12/18 。  


 

confirmit中set()方法:

/* 单选题圈选与清空 */
f('A1').set('1')  /* A1题选中code==1   */
f('A1').set(null) /* A1题清空选中的内容 */

/* 多选题圈选与清除已经选中的某些选项 */
f('A2')['2'].set('1')  /* A2题选中code==2   */
f('A2')['2'].set(null) /* A2题清除已经选中的code==2 */

当A2的选项是A1选项的母集,不询问A2, 直接把A1选中的选项赋值给A2。

var codes=f('A1').categories();
for(var i=0; i<codes.length; i++){
    f('A2')[codes[i]].set('1')
}

//如果是在A2题之前执行赋值 则可以使用如下代码
f('A2').set(f('A1'))

/*  为何要在题前才能使用此代码呢?  
    因为如果在题后执行赋值代码  f('A2').set(f('A1'))  时会先清空 A2题,再把 A1的答案赋值给A2。
    这样一来A2题人为选中的答案就会丢失。
*/

这个题后 圈选会清除 人为选中答案 的发现多亏了 bert 同事,哈哈哈。   能接触到confirmit的同行有兴趣可以多去看看官方文档资料。

记录于2020/12/18。


 

posted on 2020-09-23 18:31  人生与戏  阅读(969)  评论(0编辑  收藏  举报