From 69f0bf69e6412e9cbc8b785dbf7b81d3fe96c864 Mon Sep 17 00:00:00 2001 From: Andrew Date: Tue, 4 Feb 2025 06:13:14 +0000 Subject: [PATCH] The survey.prevPage() and survey.nextPage() function doesn't correctly navigate to the previous and next pages when a survey displays each question on a separate page fix #9330 (#9392) --- packages/survey-core/src/survey.ts | 2 ++ packages/survey-core/tests/surveytests.ts | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/packages/survey-core/src/survey.ts b/packages/survey-core/src/survey.ts index c82360df8a..9255342ebe 100644 --- a/packages/survey-core/src/survey.ts +++ b/packages/survey-core/src/survey.ts @@ -4104,6 +4104,7 @@ export class SurveyModel extends SurveyElementCore * @see completeLastPage */ public nextPage(): boolean { + if(this.currentSingleQuestion) return this.performNext(); if (this.isLastPage) return false; return this.doCurrentPageComplete(false); } @@ -4429,6 +4430,7 @@ export class SurveyModel extends SurveyElementCore * @see nextPage */ public prevPage(): boolean { + if(this.currentSingleQuestion) return this.performPrevious(); if (this.isFirstPage || this.state === "starting") return false; this.resetNavigationButton(); diff --git a/packages/survey-core/tests/surveytests.ts b/packages/survey-core/tests/surveytests.ts index caedfceab9..ae02f69c36 100644 --- a/packages/survey-core/tests/surveytests.ts +++ b/packages/survey-core/tests/surveytests.ts @@ -7835,6 +7835,28 @@ QUnit.test("Randomize questions in page and panels & single question per page", Helpers.randomizeArray = oldFunc; }); +QUnit.test("questionPerPage vs nextPage&prevPage", function (assert) { + const survey = new SurveyModel({ + questionsOnPageMode: "questionPerPage", + pages: [ + { elements: [{ type: "text", name: "q1" }, { type: "text", name: "q2" }] }, + { elements: [{ type: "text", name: "q3" }, { type: "text", name: "q4" }] }, + ] + }); + assert.equal(survey.currentSingleQuestion.name, "q1", "currentSingleQuestion #1"); + survey.nextPage(); + assert.equal(survey.currentSingleQuestion.name, "q2", "currentSingleQuestion #2"); + survey.nextPage(); + assert.equal(survey.currentSingleQuestion.name, "q3", "currentSingleQuestion #3"); + survey.nextPage(); + assert.equal(survey.currentSingleQuestion.name, "q4", "currentSingleQuestion #4"); + survey.prevPage(); + assert.equal(survey.currentSingleQuestion.name, "q3", "currentSingleQuestion #5"); + survey.prevPage(); + assert.equal(survey.currentSingleQuestion.name, "q2", "currentSingleQuestion #6"); + survey.prevPage(); + assert.equal(survey.currentSingleQuestion.name, "q1", "currentSingleQuestion #7"); +}); QUnit.test("Quiz, correct, incorrect answers", function (assert) { var survey = new SurveyModel({