Overview
Capture real-time events from your survey platform and analyze user behavior using the Data Quality API.
1. Setup
Add the following code snippet to your survey platform and replace exampleTextarea
with the ID of your textbox.
const textbox_id = 'exampleTextarea';
// Max number of characters to store in history
const max_characters_for_history = 25000;
document.addEventListener('DOMContentLoaded', function () {
const textarea = document.getElementById(textbox_id);
const key_history = [];
const paste_history = [];
let text_over_length = false;
let t0; // performance baseline
// track keydown times by code
const keyDownTimes = new Map();
function recordEntry(entry) {
if (text_over_length) return;
// compute combined length of both histories plus this new entry
const combined = [...key_history, ...paste_history, entry];
const length_of_history = JSON.stringify(combined).length;
if (length_of_history > max_characters_for_history) {
text_over_length = true;
return;
}
if ('k' in entry) {
key_history.push(entry);
} else {
paste_history.push(entry);
}
}
// --- Paste events ---
textarea.addEventListener('paste', function (e) {
if (t0 == null) t0 = performance.now();
const t = Math.round(performance.now() - t0);
const pasted = (e.clipboardData || window.clipboardData).getData('text');
/** @type {SurveyEntryPaste} */
const entry = { t, c: pasted };
recordEntry(entry);
});
// --- Keydown: start timing ---
textarea.addEventListener('keydown', function (e) {
if (t0 == null) t0 = performance.now();
if (!keyDownTimes.has(e.code)) {
keyDownTimes.set(e.code, performance.now());
}
});
// --- Keyup: finalize the keystroke entry ---
textarea.addEventListener('keyup', function (e) {
const downTs = keyDownTimes.get(e.code);
if (downTs == null) return;
keyDownTimes.delete(e.code);
const upTs = performance.now();
const t = Math.round(downTs - t0);
const ht = Math.round(upTs - downTs);
/** @type {SurveyEntryKeyStroke} */
const entry = {
k: e.key,
c: e.code,
t,
ht
};
recordEntry(entry);
});
});
2. Send events to Aftercare
Add the key events and paste events to the SurveyEntry
object.
Aftercare will always evaluate the keystroke event issues if key events are present.
See the API reference for more information.