Survey.StylesManager.applyTheme("defaultV2");
function doOnCurrentPageChanged(survey) {
document.getElementById('pageSelector').value = survey.currentPageNo;
document.getElementById('surveyPrev').style.display = !survey.isFirstPage ? "inline" : "none";
document.getElementById('surveyNext').style.display = !survey.isLastPage ? "inline" : "none";
document.getElementById('surveyComplete').style.display = survey.isLastPage ? "inline" : "none";
document.getElementById('surveyProgress').innerText = "Page " + (survey.currentPageNo + 1) + " of " + survey.visiblePageCount + ".";
if(document.getElementById('surveyPageNo')) document.getElementById('surveyPageNo').value = survey.currentPageNo;
}
function setupPageSelector(survey) {
window.navSurvey = survey;
var selector = document.getElementById('pageSelector');
for(var i = 0; i < survey.visiblePages.length; i ++) {
var option = document.createElement("option");
option.value = i;
option.text = "Page " + (i + 1);
selector.add(option);
}
}
var json = {
title: "Software developer survey.",
pages: [
{
"title": "What operating system do you use?",
"elements": [
{
"type": "checkbox",
"name": "opSystem",
"title": "OS",
"hasOther": true,
"isRequired": true,
"choices": [ "Windows", "Linux", "Macintosh OSX" ]
}
]
},
{
"title": "What language(s) are you currently using?",
"elements": [
{
"type": "checkbox",
"name": "langs",
"title": "Please select from the list",
"colCount": 4,
"isRequired": true,
"choices": [
"Javascript",
"Java",
"Python",
"CSS",
"PHP",
"Ruby",
"C++",
"C",
"Shell",
"C#",
"Objective-C",
"R",
"VimL",
"Go",
"Perl",
"CoffeeScript",
"TeX",
"Swift",
"Scala",
"Emacs Lisp",
"Haskell",
"Lua",
"Clojure",
"Matlab",
"Arduino",
"Makefile",
"Groovy",
"Puppet",
"Rust",
"PowerShell"
]
}
]
},
{
"title": "Please enter your name and e-mail",
"elements": [
{
"type": "text",
"name": "name",
"title": "Name:"
},
{
"type": "text",
"name": "email",
"title": "Your e-mail"
}
]
}]
};
window.survey = new Survey.Model(json);
survey.onComplete.add(function(sender) {
document.querySelector('#surveyResult').textContent =
"Result JSON:\n" + JSON.stringify(sender.data, null, 3);
});
survey.showTitle = false;
ReactDOM.render(
<SurveyReact.Survey model={survey} onCurrentPageChanged={doOnCurrentPageChanged} />, document.getElementById("surveyElement"));
setupPageSelector(survey);
doOnCurrentPageChanged(survey);
survey.showTitle = false;
<!DOCTYPE html>
<html lang="en">
<head>
<title>Custom Navigation, Reactjs Survey Library Example</title>
<meta name="viewport" content="width=device-width" />
<script src="https://unpkg.com/react@17.0.1/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@17.0.1/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/@babel/standalone@7.2.5/babel.min.js"></script>
<script src="/DevBuilds/survey-core/survey.core.min.js"></script>
<script src="/DevBuilds/survey-core/survey.i18n.min.js"></script>
<script src="/DevBuilds/survey-react-ui/survey-react-ui.min.js"></script>
<link href="/DevBuilds/survey-core/defaultV2.min.css" type="text/css" rel="stylesheet" />
<link rel="stylesheet" href="./index.css">
</head>
<body style="margin: 0">
<div id="surveyExternalNavigation">
External navigation:
<span id="surveyProgress"></span>
<span id="surveyPrev" onclick="navSurvey.prevPage();">Prev</span>
<span id="surveyNext" onclick="navSurvey.nextPage();">Next</span>
<span id="surveyComplete" onclick="navSurvey.completeLastPage();">Complete</span>
<br />
Go to page directly without validation: <select id="pageSelector" onchange="navSurvey.currentPageNo = this.value"></select>
</div> <div id="surveyElement" style="display:inline-block;width:100%;">
</div>
<div id="surveyResult"></div>
<script type="text/babel" src="./index.js"></script>
</body>
</html>
#surveyExternalNavigation {
padding: 16px 36px;
line-height: 32px;
}
#surveyPrev, #surveyNext, #surveyComplete {
color: #1ab394;
cursor: pointer;
}
#pageSelector {
width: 90px;
box-sizing: border-box;
border-radius: 2px;
height: 34px;
line-height: 34px;
background: #fff;
outline: 1px solid #d4d4d4;
text-align: left;
border: none;
padding: 0 5px;
}
#pageSelector:focus {
outline: 1px solid #1ab394;
}
Use onCurrentPageChanged event to update it after the current page is changed.
If you use knockout, please use onRedered event to initialized your custom navigation elements.
survey.onCurrentPageChanged.add(function (sender, options) { var survey = sender; var oldCurrentPage = options.oldCurrentPage; var newCurrentPage = options.newCurrentPage; //Your code }); //Requires for knockout platoform only survey.onRendered.add(function (sender) { var survey = sender; //Your code });
Help us serve you better by taking this brief survey.
We are interested to learn more about your
experience of using our libraries.
We'd really appreciate your feedback.
Start the SurveyApproximate time to complete: 2 min.