Is it possible to create a slider as a question type in Pavlovia Surveys? There is no such question type. I added an html element from Rebecca Hirst / html_sliders_demo · GitLab, but the Submit button doesn’t work.
I would be grateful if you could point me to my mistake.
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="user-scalable=no">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js">
</script>
<script type="text/javascript">
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m, key, value) {
vars[key] = value;
});
return vars;
}
function getUrlParam(parameter, defaultvalue) {
var urlparameter = defaultvalue;
if (window.location.href.indexOf(parameter) > -1) {
urlparameter = getUrlVars()[parameter];
}
return urlparameter;
}
var xRes = getUrlParam('xRes', 'Empty') * .8;
var yRes = getUrlParam('yRes', 'Empty') * .04;
</script>
<style type="text/css">
<!-- .style1 {
font-size: 40px
}
.style2 {
text-align: left
}
input.checkbox {
width: 40px;
height: 40px;
}
input[type=radio] {
width: 40px;
height: 40px;
}
.button {
background-color: #04AA6D;
border: none;
color: white;
padding: 10px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 20px;
margin: 4px 2px;
border-radius: 12px;
}
-->
</style>
</head>
<style>
.slidecontainer {
width: 100%;
}
.slider {
-webkit-appearance: none;
width: 100%;
height: 25px;
background: lightgrey;
outline: none;
opacity: 0.7;
-webkit-transition: .2s;
transition: opacity .2s;
}
.slider:hover {
opacity: 1;
}
.slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 25px;
height: 25px;
background: #04AA6D;
cursor: pointer;
}
.slider::-moz-range-thumb {
width: 25px;
height: 25px;
background: #04AA6D;
cursor: pointer;
}
.desk {
display: flex;
justify-content: space-between;
}
.scale {
color: black;
}
datalist {
display: flex;
flex-direction: column;
justify-content: space-between;
writing-mode: vertical-lr;
width:100%;
}
option {
padding: 5;
}
</style>
</head>
<body id="bodyForm">
<form name="form1" method="post" action="">
<p class="style2"> How often do you consider referral to radiation therapy for basal cell skin cancers? </p>
<div class="slidecontainer" , id='slider1'>
<input type="range" min="1" max="100" value="50" class="slider" id="myRange1" list="values">
<datalist id="values">
<option value="0" label="Very frequently"></option>
<option value="25" label="Frequently"></option>
<option value="50" label="Occasionally"></option>
<option value="75" label="Rarely "></option>
<option value="100" label="Never"></option>
</datalist>
</div>
<div style="margin:50px"></div>
<div class="slidecontainer" , id='slider2'>
<p>How often do you consider surgical excision for basal cell skin cancers? </p><input type="range" min="1" max="100" value="50" class="slider" id="myRange2" list="values">
<datalist id="values">
<option value="0" label="Very frequently"></option>
<option value="25" label="Frequently"></option>
<option value="50" label="Occasionally"></option>
<option value="75" label="Rarely "></option>
<option value="100" label="Never"></option>
</datalist>
</div>
<div style="margin:50px"></div>
</form>
<tr>
<td colspan="2" style="text-align:right"><input id="submitbutton" type="submit" name="Submit" value="Submit" class="button"></td>
</tr>
<script>
document.getElementById('bodyForm').style = "width: " + xRes + "px; font-family: Arial, Helvetica, sans-serif; justify-content: left; background-color: white; color: black; font-size: " + yRes + "px";
</script>
<script>
//update if each slider has been moved (so that the participant can only press submit if all sliders have been moved from default)
var slider1 = document.getElementById("myRange1");
var output1 = document.getElementById("slider1txt");
slider1.moved = false;
// Update the current slider value (each time you drag the slider handle)
slider1.oninput = function() {
output1.innerHTML = this.value;
this.moved = true;
}
var slider2 = document.getElementById("myRange2");
var output2 = document.getElementById("slider2txt");
slider2.moved = false;
// Update the current slider value (each time you drag the slider handle)
slider2.oninput = function() {
output2.innerHTML = this.value;
this.moved = true;
}
var mybutton = document.getElementById("submitbutton");
mybutton.onclick = function() {
console.log('buttonClicked!');
this.value = 'submitted';
}
</script>
</body>
</html>