<!DOCTYPE html>
<html>
<head>
<title>Welcome to JQuery</title>
<script src="https://unpkg.com/jquery"></script>
<script src="https://surveyjs.azureedge.net/0.12.17/survey.jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://unpkg.com/bootstrap@3.3.7/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="./index.css">
</head>
<body>
<div id="surveyElement"></div>
<div id="surveyResult"></div>
<script src="./index.js"></script>
</body>
</html>
Survey.Survey.cssType = "bootstrap";
Survey.defaultBootstrapCss.navigationButton = "btn btn-green";
Survey.JsonObject.metaData.addProperty("dropdown", {name: "renderAs", default: "standard", choices: ["standard", "select2tagbox"]});
Survey.JsonObject.metaData.addProperty("dropdown", {name: "maximumSelectionLength", default: undefined});
window.survey = new Survey.Model({
questions: [{
type: "dropdown", renderAs: "select2tagbox", maximumSelectionLength: 2, choicesByUrl: { url: "https://restcountries.eu/rest/v1/all" },
name: "countries", title: "Please select all countries you have been for the last 3 years."
}]
});
survey.onComplete.add(function(result) {
document.querySelector('#surveyResult').innerHTML = "result: " + JSON.stringify(result.data);
});
var widget = {
name: "select2tagbox",
htmlTemplate: "<select multiple='multiple' style='width: 100%;'></select>",
isFit : function(question) { return question["renderAs"] === 'select2tagbox'; },
afterRender: function(question, el) {
var $el = $(el).find("select");
var widget = $el.select2({
theme: "classic",
maximumSelectionLength: question.maximumSelectionLength
});
$el.on('select2:unselect', function (e) {
var index = (question.value || []).indexOf(e.params.data.id);
if(index !== -1) {
var val = question.value;
val.splice(index, 1);
question.value = val;
}
});
question.choicesChangedCallback = function() {
$el.select2({maximumSelectionLength: question.maximumSelectionLength, data: question.visibleChoices.map(function(choice) { return { id: choice.value, text: choice.text }; })});
}
$el.on('select2:select', function (e) {
question.value = (question.value || []).concat(e.params.data.id);
});
var updateHandler = function() {
$el.val(question.value).trigger("change");
};
question.valueChangedCallback = updateHandler;
question.choicesChangedCallback();
updateHandler();
},
willUnmount: function(question, el) {
var $select = $(el).find("select").select2();
$select.each(function(i,item){
$(item).select2("destroy");
});
}
}
Survey.CustomWidgetCollection.Instance.addCustomWidget(widget);
//survey.data = { countries: ["Andorra"] };
$("#surveyElement").Survey({
model: survey
});
.btn-green {
background-color: #1ab394;
color: #fff;
border-radius: 3px;
}
.btn-green:hover, .btn-green:focus {
background-color: #18a689;
color: #fff;
}
.panel-footer {
text-align: right;
background-color: #fff;
}