surveyJS
/Demos
Demo Stack Slider 2
HTML
<div class="surveyjs-wrapper surveyjs-custom-inputs panel" data-surveyjs-wrapper>
<div class="panel-body">
<form action="../json/survey.json" name="surveyjs-form" class="surveyjs-form" data-surveyjs-form novalidate>
<div class="surveyjs-body questionsList stackSlider" data-surveyjs-body></div>
<div class="surveyjs-footer row">
<div class="surveyjs-question-wrapper text-right" data-formjs-question data-surveyjs-external="1">
<div class="surveyjs-answers-wrapper form-group">
<div class="text-left small" data-question></div>
<div class="form-check-inline abc-radio" data-answer>
<input class="form-check-input" name="surveyjs-answer-external" data-exclude-storage data-field/>
<label class="surveyjs-label form-check-label">
<span data-label></span>
</label>
</div>
<div class="form-check-inline abc-radio" data-answer>
<input class="form-check-input" name="surveyjs-answer-external" data-exclude-storage data-field/>
<label class="surveyjs-label form-check-label">
<span data-label></span>
</label>
</div>
</div>
<div class="surveyjs-errors-wrapper small mb-4">
To go on you must select an answer.
</div>
</div>
<button class="surveyjs-submit-btn btn btn-red d-block mx-auto" type="submit">
<span class="surveyjs-submit-text">SEND</span>
</button>
</div>
</form>
</div>
</div>
JS
// FULL CODE: /js/demos/demo-stackslider-2.js
const $form = document.querySelector('[data-surveyjs-form]');
const options = {
url: '../json/survey.json',
cssClasses: {
select: 'custom-select'
},
templates: {
wrapper: {
field: '<div class="surveyjs-field-container surveyjs-{{answerType}}-wrapper abc-{{answerType}} {{wrapperClasses}}">'+
'{{fieldTemplate}}'+
'{{labelTemplate}}'+
'</div>',
question: '<div class="st-item" data-title="#{{questionNumber}}">'+
'<div data-question-id="{{questionId}}" data-formjs-question class="surveyjs-question-wrapper">'+
'<div class="surveyjs-question-text">{{questionText}}</div>'+
'<div class="surveyjs-answers-wrapper form-group">'+
'{{answersHTML}}'+
'</div>'+
'</div>'+
'</div>',
related: '<div class="surveyjs-field-wrapper surveyjs-related-wrapper input-group">'+
'<div class="input-group-prepend form-check abc-radio surveyjs-answer-radio">'+
'<div class="input-group-text">'+
'{{fieldTemplate}}'+
'{{labelTemplate}}'+
'</div>'+
'</div>'+
'{{relatedFieldHTML}}'+
'</div>'
}
},
formOptions: {
beforeSend: function beforeSend_doc( data ){...}
}
};
const onValidation = fields => {...};
const onInitSuccess = function( ajaxData ){
const $surveyForm = this.$form,
surveyBody = $surveyForm.querySelector('.surveyjs-body'),
initStatus = ajaxData.status;
if( initStatus === 'success' ){
$('.stackSlider').stackslider({ piles : false });
} else {
const elemToRemove = $surveyForm.querySelector('.surveyjs-footer');
elemToRemove.parentNode.removeChild(elemToRemove);
surveyBody.innerHTML = '<div class="surveyjs-message">Loading Error. Please, reload the page.</div>';
}
};
$form.addEventListener('fjs.field:validation', event => {
onValidation([event.detail]);
});
$form.addEventListener('fjs.form:validation', event => {
onValidation(event.detail.fields);
});
$form.addEventListener('fjs.form:submit', event => {
event.detail
.then(ajaxData => {...})
.catch(error => {...})
.finally(() => {...});
});
$form.addEventListener('sjs:init', event => {
event.detail
.then(data => {
onInitSuccess.call(mySurvey, data);
})
.catch(error => {...});
});
const mySurvey = new Survey( $form, options );