Custom Navigation

External navigation: Prev Next Complete
Go to page directly without validation:


function doOnCurrentPageChanged(survey) {
    var survey = window.navSurvey;
    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);

                    var json = { 
    title: "Software developer survey.",
    pages: [
        "title": "What operating system do you use?",
        "elements": [
            "type": "checkbox",
            "name": "opSystem",
            "title": "OS",
            "showOtherItem": 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": [
              "Emacs Lisp",
        "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(, null, 3);
survey.showTitle = false;
            <SurveyReact.Survey model={survey}  onCurrentPageChanged={doOnCurrentPageChanged} />, document.getElementById("surveyElement"));
survey.showTitle = false;

<!DOCTYPE html>
<html lang="en">
    <title>Custom Navigation, Reactjs Survey Library Example</title>
<meta name="viewport" content="width=device-width" />
    <script src=""></script>
    <script src=""></script>
    <script src=""></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">

<body style="margin: 0">
    <div id="surveyExternalNavigation">
    External navigation:
    <span id="surveyProgress"></span>
    <span id="surveyPrev" onclick="window.navSurvey.prevPage();">Prev</span>
    <span id="surveyNext" onclick="window.navSurvey.nextPage();">Next</span>
    <span id="surveyComplete" onclick="window.navSurvey.completeLastPage();">Complete</span>
    <br />
    Go to page directly without validation: <select id="pageSelector" onchange="window.navSurvey.currentPageNo = this.value"></select>

    </div>            <div id="surveyElement" style="display:inline-block;width:100%;">
    <div id="surveyResult"></div>

<script type="text/babel" src="./index.js"></script>


#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;
Sorry, we can't retrieve the data from server. Please comeback later.

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


Get/set the current page No:

from 0 to visible page count - 1.
survey.currentPageNo = yourValue;

Page Prev Text:

survey.pagePrevText = yourValue;

survey.pageNextText = yourValue;

survey.completeText = yourValue;

survey.showNavigationButtons = yourValue;

Why we use cookies.

This site uses cookies to make your browsing experience more convenient and personal. Cookies store useful information on your computer to help us improve the efficiency and relevance of our site for you. In some cases, they are essential to making the site work properly. By accessing this site, you consent to the use of cookies.

For more information, refer to DevSoft Baltic’ privacy policy and cookie policy.