iT邦幫忙

0

Limesurvey進階應用--數值題範圍設定與彈出確認視窗

  • 分享至 

  • xImage
  •  

設計情境

在設計問卷時,設計一個文字框,請填答者輸入數字或文字是很常見的題型。對於數字輸入,我們最擔心的就是胖手指問題,多一個0,少一個0都嚴重影響資料的正確性。因此,對於這類題型,我會想要設計提醒,當數值可疑時,提醒填答者注意。但由於只是提醒,並不代表不能輸入,因此我希望可以在題目中以醒目的方式提示填答者,但若資料正確,仍然可以接受答案。
這篇文章我將以數值題說明設計方式,其實對於文字題、或多題之間的關係也可以做類似設計,不過這暫時不在這篇文章的討論範圍內。
以下將以 「請問您每個月的工作收入大約多少元?元」 為例說明相關設定。
設定可輸入的數值範圍為0, 96(代表不知道), 98(代表拒答)以及1,000~900,000。
並希望在輸入數值介於1,000~20,000以及超過10萬時,提示受訪者確認金額的正確性。

可輸入範圍設定

Limesurvey在數值題的設定中,可於Input類別中設定最大值及最小值。
https://ithelp.ithome.com.tw/upload/images/20241020/20142528oEIjcHjkcL.png
但我希望設定的並非連續範圍,因此這邊就無法設定了。因此,我改用logic類別中的Question validation equation進行設定,設定語法如下:

self==0 or self==96 or self==98 or (self>=1000 and self<=900000)

其中,"self"為Limesurvey的變數,及「本題」之意。在此設定之後,如果輸入超過範圍的數值,在點選「下一頁」時,系統就會出現提示不允許進入下一題。
https://ithelp.ithome.com.tw/upload/images/20241020/20142528xymSDM0m84.png

內建提示

但我們不希望只是超出範圍才提示,而是將提示的範圍縮小,在「懷疑有問題」時就先提示。我們可以在logic類別的Question validation tip中自訂提示的時機與文字。例如我們希望在金額介於1,000~20,000以及超過10萬時分別顯示提示文字,我們可以這樣做。

<span style="color:#c0392b;">{if(!is_empty(self) and (self>=1000 and self<=20000),"金額小於2萬,請確認是否正確!", if(!is_empty(self) and self>=100000, "金額超過10萬,請確認是否正確!",""))}</span>

if是Limesurvey可使用的函數,格式類似excel的if函數。我使用了兩層函數,當輸入數值介於10000-200000時,會顯示文字"金額小於2萬,請確認是否正確!",而當金額大於10萬時,則會出現文字"金額超過10萬,請確認是否正確!"。為達到提示效果,我也將文字改為紅色。效果如下:
https://ithelp.ithome.com.tw/upload/images/20241020/201425282S6Lgy7f1A.png
在上圖的例子中,我輸入了15萬,因此會顯示紅色提示文字。但以為數值仍在Question validation equation所設定的範圍內,因此點選下一頁時,仍可順利通過。

彈出確認視窗

如果覺得內建提示不夠明顯,我們還可以使用javascript做出彈出視窗。
我們可以在題目欄位中點選"</>"叫出原始碼對話框,並且將以下程式貼在題目之後。

<script type="text/javascript">
$(document).ready(function() {
    // 監聽「下一頁」按鈕的點擊事件
    $('#ls-button-submit').on('click', function(e) {
        var value = $('#answer{self.sgqa}').val(); // 獲取輸入框中的值

        // 檢查是否超過 10 萬元
        if (value >= 100000 || (value >=1000 && value<=20000)) {
            // 阻止表單提交,先處理確認
            e.preventDefault();

            // 彈出確認框詢問是否正確
          var checkInfo;
          if (value>=100000) {
            checkInfo = "超過10萬元";
          } else {
            checkInfo = "小於2萬元";
          }
            var confirmation = confirm("您輸入的金額是 " + value + " 元," + checkInfo + ",請問是否正確?");
            if (confirmation) {
                // 如果確認正確,觸發「下一頁」按鈕的點擊事件以觸發 LimeSurvey 的內部提交邏輯
                $('#ls-button-submit').off('click'); // 先移除當前的事件監聽器,防止無限循環
                $('#ls-button-submit').click(); // 模擬再次點擊提交按鈕
            } else {
                // 否則聚焦到輸入框,讓使用者修改
                $('#answer{self.sgqa}').focus();
            }
        }
    });
});
</script>

這段語法中用到了"{self.sgqa}",這是Limesurvey的語法,可以顯示該題目的代號。提示文字及現實條件則可視自己需要修改。
這樣,若輸入小於2萬或大於10萬的數字時,在點選「下一頁」後,就會跳出Confirm視窗向填答者確認。若點選OK,則進入下一題,點選取消則回到原題目,讓填答者可以修改答案。
https://ithelp.ithome.com.tw/upload/images/20241020/20142528ezbVKcMpBW.png

以上做法提供大家參考囉!


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言