confirmit平台問題匯總


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。


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM