<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: _SurveyJS</title>
    <description>The latest articles on Forem by _SurveyJS (@_surveyjs).</description>
    <link>https://forem.com/_surveyjs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F9626%2F06b7ed19-dc54-4d69-b7f0-27a51713d7cf.png</url>
      <title>Forem: _SurveyJS</title>
      <link>https://forem.com/_surveyjs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/_surveyjs"/>
    <language>en</language>
    <item>
      <title>Custom Form Builder for React Applications</title>
      <dc:creator>SurveyJS</dc:creator>
      <pubDate>Tue, 13 Jan 2026 21:33:10 +0000</pubDate>
      <link>https://forem.com/_surveyjs/custom-form-builder-for-react-applications-2a12</link>
      <guid>https://forem.com/_surveyjs/custom-form-builder-for-react-applications-2a12</guid>
      <description>&lt;p&gt;Building forms in React often starts simple but quickly becomes complex as requirements grow. Validation rules, conditional logic, dynamic fields, and enterprise constraints can turn handcrafted forms into hard-to-maintain code. SurveyJS provides a custom form builder for React applications that solves these challenges by enabling dynamic, schema-driven forms while keeping developers fully in control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built for Developers Who Need Dynamic Forms in React
&lt;/h2&gt;

&lt;p&gt;SurveyJS is designed for developers building applications where forms are not static. Instead of hardcoding inputs and rules, forms are defined as JSON and rendered dynamically at runtime.&lt;/p&gt;

&lt;p&gt;SurveyJS is a good fit for teams that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build dynamic forms that change frequently&lt;/li&gt;
&lt;li&gt;Need a custom form builder embedded into their own React applications&lt;/li&gt;
&lt;li&gt;Want a developer-first solution without SaaS lock-in or hosted data storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because SurveyJS is delivered as JavaScript libraries, &lt;a href="https://surveyjs.io/survey-creator/documentation/get-started-react" rel="noopener noreferrer"&gt;it integrates directly into your codebase&lt;/a&gt; and development workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build Dynamic Forms from JSON Schemas
&lt;/h2&gt;

&lt;p&gt;SurveyJS uses a JSON schema to describe the structure and behavior of a form. This schema defines questions, layouts, validation rules, and logic in a clear, structured format.&lt;/p&gt;

&lt;p&gt;With SurveyJS, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create reusable schemas shared across applications&lt;/li&gt;
&lt;li&gt;Store schemas in your own database (&lt;a href="https://surveyjs.io/documentation/backend-integration" rel="noopener noreferrer"&gt;Learn more about Backend integration&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Generate forms at runtime using &lt;a href="https://surveyjs.io/form-library/documentation/overview" rel="noopener noreferrer"&gt;SurveyJS form rendering component&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Update forms without redeploying your React app&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because the schema is platform-agnostic, the same form definition can be reused with different front-end frameworks while preserving consistent behavior. SurveyJS offers dedicated npm packages for Angular, React, Vue, and VanillaJS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Designed for Modern React Applications
&lt;/h2&gt;

&lt;p&gt;SurveyJS provides dedicated React components that integrate cleanly into modern React applications. Forms are rendered as part of your component tree and work naturally with existing layouts and routing.&lt;/p&gt;

&lt;p&gt;Key integration benefits include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compatibility with React hooks and modern state patterns&lt;/li&gt;
&lt;li&gt;Smooth behaviour in single-page applications (SPAs)&lt;/li&gt;
&lt;li&gt;A framework-agnostic core that separates form logic from the UI layer (&lt;a href="https://surveyjs.io/documentation/surveyjs-architecture" rel="noopener noreferrer"&gt;Learn more about SurveyJS architecture&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This architecture allows SurveyJS forms to remain portable and maintainable over time.&lt;/p&gt;

&lt;p&gt;Advanced Logic and Validation Without Hardcoding&lt;/p&gt;

&lt;p&gt;One of SurveyJS’s strengths is its ability to handle complex form logic declaratively. Instead of writing conditional logic in React components, rules are defined directly in the schema like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;json

[
  ...,
{
    "name": "textlengthvalidator",
    "type": "comment",
    "title": "Text Length Validator",
    "description": "Enter text no shorter than 10 and no longer than 280 symbols",
    "isRequired": true,
    "validators": [{
      "type": "text",
      "minLength": 10,
      "maxLength": 280
    }]
  },
...
]

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SurveyJS offers a GUI for configuring form logic and supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conditional logic for dynamic visibility &lt;/li&gt;
&lt;li&gt;&lt;a href="https://surveyjs.io/form-library/examples/javascript-form-validation/reactjs" rel="noopener noreferrer"&gt;Built-in validation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://surveyjs.io/form-library/documentation/data-validation#implement-custom-client-side-validation" rel="noopener noreferrer"&gt;Support for custom client-side validation rules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://surveyjs.io/form-library/documentation/design-survey/conditional-logic#calculated-values" rel="noopener noreferrer"&gt;Calculated fields and expressions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Cross-field dependencies using expression syntax&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By centralizing logic in the schema, SurveyJS reduces code complexity and improves consistency across forms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fully Customizable and White-Label
&lt;/h2&gt;

&lt;p&gt;SurveyJS is designed to be fully integrated and customized. It offers &lt;em&gt;white-label usage and does not impose SurveyJS branding&lt;/em&gt; or fixed UI constraints, making it suitable for white-label products.&lt;/p&gt;

&lt;p&gt;Customization options allow developers to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create &lt;a href="https://surveyjs.io/form-library/documentation/customize-question-types/question-customization-options" rel="noopener noreferrer"&gt;custom fields and question types&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Extend functionality with custom widgets (&lt;a href="https://surveyjs.io/survey-creator/examples/form-builder-with-integrated-rich-text-editor/reactjs" rel="noopener noreferrer"&gt;This example shows how to integrate a 3rd-rarty rich content editor&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Localize the form builder UI to any language&lt;/li&gt;
&lt;li&gt;Integrate forms into existing design systems and apply &lt;a href="https://surveyjs.io/survey-creator/examples/add-custom-theme/reactjs" rel="noopener noreferrer"&gt;full UI theming using custom CSS&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This flexibility makes SurveyJS suitable for both internal tools and customer-facing applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  You Stay in Control of Your Data
&lt;/h2&gt;

&lt;p&gt;SurveyJS is a self-hosted solution. It does not collect, store, or process user data on your behalf.&lt;/p&gt;

&lt;p&gt;With SurveyJS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All form data stays in your application&lt;/li&gt;
&lt;li&gt;You control backend integration and data flow&lt;/li&gt;
&lt;li&gt;There is no built-in or external data storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach is especially important for organizations with strict security, privacy, or compliance needs.&lt;/p&gt;

&lt;p&gt;The team offer &lt;a href="https://surveyjs.io/backend-integration/examples" rel="noopener noreferrer"&gt;several examples to help you integrate SurveyJS components with your backend system&lt;/a&gt;. Examples are available for PHP, ASP.NET, and Node.js.&lt;/p&gt;

&lt;h2&gt;
  
  
  How SurveyJS Compares to Other React Form Builders
&lt;/h2&gt;

&lt;p&gt;Many React form solutions focus on managing form state and validation at the component level. While effective for simple use cases, these tools often require significant custom code for dynamic or schema-driven forms.&lt;/p&gt;

&lt;p&gt;Compared to typical alternatives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SurveyJS provides a schema-based form builder, not just a form library&lt;/li&gt;
&lt;li&gt;Business logic lives in configuration rather than React code&lt;/li&gt;
&lt;li&gt;It scales better for complex and evolving requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For teams looking for an open-source, dynamic, and scalable form solution SurveyJS offers a balance: a developer-friendly open-source architecture with enterprise-ready capabilities, making it a strong enterprise form builder for React applications.&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>javascript</category>
      <category>react</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Top Customizable Survey Software You Shouldn't Miss</title>
      <dc:creator>SurveyJS</dc:creator>
      <pubDate>Wed, 25 Sep 2024 12:55:13 +0000</pubDate>
      <link>https://forem.com/_surveyjs/top-customizable-survey-software-you-shouldnt-miss-1k4c</link>
      <guid>https://forem.com/_surveyjs/top-customizable-survey-software-you-shouldnt-miss-1k4c</guid>
      <description>&lt;p&gt;When it comes to managing surveys, having full control over your data is crucial. Relying on third-party platforms often means facing limitations in customization, data storage, or integration. DIY survey software allows you to create, manage, and analyze your surveys without compromise. These tools give you the flexibility to design forms that suit your exact needs while ensuring your data remains secure. Here’s a rundown of six web-based customizable survey tools, each with its own strengths in form creation, survey filling, data analysis, pricing, and accessibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. SurveyJS
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frec8dfcob15ewvf7tdp1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frec8dfcob15ewvf7tdp1.png" alt="SurveyJS - customizable survey software" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;SurveyJS is an open-source, &lt;a href="https://surveyjs.io/" rel="noopener noreferrer"&gt;highly customizable survey software&lt;/a&gt; with a focus on flexibility and ease of integration into modern web applications. SurveyJS &lt;strong&gt;client JavaScript libraries&lt;/strong&gt; &lt;a href="https://surveyjs.io/form-library/documentation/overview#get-started" rel="noopener noreferrer"&gt;support every common front-end framework&lt;/a&gt; that you could imagine, and even the ones you couldn't. It's even more flexible when it comes to the backend - you can &lt;a href="https://surveyjs.io/documentation/backend-integration" rel="noopener noreferrer"&gt;integrate with any backend system of your choice&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Form Creation
&lt;/h3&gt;

&lt;p&gt;The form management platform offers a visual form builder, allowing non-tech users to build forms quickly. Its drag-and-drop interface simplifies form setup, and it supports custom themes and layouts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Form Filling
&lt;/h3&gt;

&lt;p&gt;With responsive designs and mobile optimization, forms are easy to fill out on any device. SurveyJS also supports complex conditions, allowing for dynamic changes based on user input.&lt;/p&gt;

&lt;h3&gt;
  
  
  Survey Data Analysis
&lt;/h3&gt;

&lt;p&gt;SurveyJS offers a &lt;a href="https://surveyjs.io/dashboard/documentation/overview" rel="noopener noreferrer"&gt;Dashboard library&lt;/a&gt; that enables users to analyze survey results using various customizable charts and tables. It provides real-time feedback, so responses can be analyzed instantly. You have complete control over your data, allowing you to sync it with platforms like Google Sheets or your company’s business insights tools. &lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;SurveyJS offers a flexible pricing model &lt;a href="https://github.com/surveyjs" rel="noopener noreferrer"&gt;by publishing its libraries on GitHub&lt;/a&gt; for free trial use. The survey rendering library is MIT licensed, allowing free use even for commercial purposes. However, for products like Survey Creator, a 'Basic' license costs around $499. For the Survey Creator, Dashboard and PDF Generator, you'll need a 'Pro' license at $899. Commercial licenses are perpetual, but access to updates requires an annual renewal. It’s ideal for both small businesses and large enterprises as it imposes no usage limitations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accessibility
&lt;/h3&gt;

&lt;p&gt;This survey tool prioritizes accessibility, &lt;a href="https://surveyjs.io/accessibility-statement" rel="noopener noreferrer"&gt;adhering to WCAG guidelines&lt;/a&gt; to ensure that forms are usable by everyone, including those with disabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. LimeSurvey
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ln4buc37b9xafbp8yuw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ln4buc37b9xafbp8yuw.png" alt="LimeSurvey — Free Online Survey Tool" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;LimeSurvey offers an all-in-one solution for the entire form lifecycle, from building and publishing to collecting and analyzing results. It’s a great option for those who want to get started quickly without managing backend infrastructure. However, it does involve sending user data to a third-party platform, meaning less control over backend technology and potential difficulties integrating with existing authentication systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Form Creation
&lt;/h3&gt;

&lt;p&gt;Though slightly less intuitive than some of the others, LimeSurvey offers a rich set of question types. However, its user interface can feel outdated and more suited to advanced users.&lt;/p&gt;

&lt;h3&gt;
  
  
  Form Filling
&lt;/h3&gt;

&lt;p&gt;LimeSurvey offers a simple form-filling UI with responsive validation after publishing, but customization options are limited unless you self-host. Self-hosting allows you to apply custom CSS, but it requires significant development work and affects all forms. It's a great choice for users seeking a ready-made solution but less ideal for those who need extensive design flexibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  Survey Data Analysis
&lt;/h3&gt;

&lt;p&gt;LimeSurvey excels in data analysis, with strong export options and built-in reporting features. The reporting is detailed, making it a solid choice for data-heavy projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;LimeSurvey offers a free, open-source 'community' edition for self-hosting, which can be complex to set up. For easier use, their cloud hosting service starts at 23€ per month (billed annually) for 10,000 responses annually, with higher plans reaching 58€ per month (billed annually) for 100,000 responses.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accessibility
&lt;/h3&gt;

&lt;p&gt;It is compliant with major accessibility standards, but some users find that its default templates may require additional customization to be fully accessible.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Formium (by Formik)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4oee5k25gzyrw4sgiv4c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4oee5k25gzyrw4sgiv4c.png" alt="Formium - Headless Form Builder For Developers" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;Formium originated from the React library Formik, designed to simplify form creation in React by providing components that streamline initial values and validation processes. Building on Formik's success, Formium introduced an online form builder platform comprising an online form interface, SDKs for integrating forms into React applications, and a robust submission and storage system that connects with Zapier for automation. However, &lt;strong&gt;Formium appears largely unmaintained&lt;/strong&gt;, with no updates to its SDK in three years and unanswered issues on GitHub, raising concerns about its future viability.&lt;/p&gt;

&lt;h3&gt;
  
  
  Form Creation
&lt;/h3&gt;

&lt;p&gt;Formium features a user-friendly logic editor that allows users to set rules for form interactions, similar to SurveyJS, by specifying criteria for fields and defining actions, primarily limited to showing or hiding questions. However, its functionality is quite basic, lacking advanced features such as copying answers between questions or making fields conditionally required, and it does not offer tools for multilingual support, necessitating additional manual effort for translations; while the form editor is intuitive, users may feel frustrated by the absence of more comprehensive features that are yet to be implemented.&lt;/p&gt;

&lt;h3&gt;
  
  
  Form Filling
&lt;/h3&gt;

&lt;p&gt;Formium offers two options for form display: a built-in form viewer on their online platform that is clean and user-friendly, and a React SDK that allows for simple rendering of forms with customizable components, providing significant flexibility for developers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Survey Data Analysis
&lt;/h3&gt;

&lt;p&gt;Formium allows users to send form submission results for storage and processing, but its dashboard lacks data visualization tools, requiring users to manually download CSV files to create graphs. While it offers 'workflows' for connecting to third-party services like Slack, email, or webhooks upon submission, any complex workflows must be managed through Zapier, which is a separate paid service not included natively in SurveyJS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;Formium has a pricing model based on form submissions, which can be a drawback for larger surveys or those with high respondent counts. The lowest tier starting at $20 per month for 25 forms and 1,000 monthly submissions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accessibility
&lt;/h3&gt;

&lt;p&gt;The platform allows developers to create accessible forms, though out-of-the-box accessibility depends on the developer's implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Form.io
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp0ys28cre19ji63gsu2g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp0ys28cre19ji63gsu2g.png" alt="Form.io - Data Governance Platform" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;Form.io offers a comprehensive suite of tools for building, publishing, and managing forms, providing both front-end and back-end solutions to meet various user needs. Their products are delivered as Docker containers for easy deployment in your own environment, while also offering a hosted SaaS solution that, although lacking some features of the self-hosted option, allows users to quickly get started with form management.&lt;/p&gt;

&lt;h3&gt;
  
  
  Form Creation
&lt;/h3&gt;

&lt;p&gt;Its form builder is feature-rich and allows for the creation of highly complex forms. The drag-and-drop interface is intuitive, but the learning curve can be steep due to the variety of options.&lt;/p&gt;

&lt;h3&gt;
  
  
  Form Filling
&lt;/h3&gt;

&lt;p&gt;Forms built with Form.io are responsive and efficient, though customization often requires a developer’s input for fine-tuning.&lt;/p&gt;

&lt;h3&gt;
  
  
  Survey Data Analysis
&lt;/h3&gt;

&lt;p&gt;Form.io's basic product lacks comprehensive reporting functionality, allowing only data exports as spreadsheets without native graphing capabilities; users can purchase a separate reporting module for $600 per month, which still offers limited reporting options. However, Form.io provides a robust developer interface for integrating form results with third-party services, including pre-built integrations like a SQL connector to sync data with custom SQL databases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;Form.io's pricing model is primarily based on deployment rather than usage, starting at $600 per month for one enterprise-level project and API server management, with an additional $300 per month for enhanced security compliance features. Their hosted SaaS version costs $300 per month, offering unlimited forms but capping submissions at 1 million per month and 1,000 monthly PDF downloads, after which they encourage users to consider self-hosted options; both self-hosted and cloud versions can be trialed for 30 days, though accessing the self-hosted trial requires scheduling a sales call.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accessibility
&lt;/h3&gt;

&lt;p&gt;Form.io offers an accessibility compliance module aimed at helping users create accessible forms, but charging extra for this feature is considered unfair since accessible design should be standard.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. FormEngine
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa01klhyxcun6p40x9oqq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa01klhyxcun6p40x9oqq.png" alt="Optimajet Drag and Drop Form Builder" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;FormEngine, developed by Optimajet as the successor to their original FormBuilder, provides a set of tools for building and deploying forms within React applications, featuring a Form Builder and a Form Viewer component. This front-end-only solution allows developers to integrate forms seamlessly into their existing applications while giving them the flexibility to manage data storage according to their preferences.&lt;/p&gt;

&lt;h3&gt;
  
  
  Form Creation
&lt;/h3&gt;

&lt;p&gt;FormEngine requires integration into a React application, limiting its use to that framework. While it offers a customizable drag-and-drop interface for building forms, the complexity of implementing rules and actions - such as showing or hiding fields based on responses - makes it less accessible for non-technical users; these features rely on programming references rather than a user-friendly interface, which could be a barrier for those unfamiliar with coding.&lt;/p&gt;

&lt;h3&gt;
  
  
  Form Filling
&lt;/h3&gt;

&lt;p&gt;The forms are fast-loading and optimized for mobile, ensuring a positive user experience across all devices.&lt;/p&gt;

&lt;h3&gt;
  
  
  Survey Data Analysis
&lt;/h3&gt;

&lt;p&gt;FormEngine lacks built-in solutions for accessing and visualizing form submission results, leaving users to manage and process their data independently; although Optimajet offers a separate product called WorkflowEngine for data processing, it does not integrate natively with FormEngine and incurs additional costs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;FormEngine offers two payment options: a perpetual license starting at approximately $899, which includes six months of updates and two months of support, allowing users to maintain the same version indefinitely; or a subscription model at around $1,499 per year, providing access across all subdomains and continuous updates as long as the subscription is active, with additional pricing options available for further inquiries.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accessibility
&lt;/h3&gt;

&lt;p&gt;FormEngine prioritises accessibility by ensuring their entire UI is keyboard accessible and incorporating &lt;code&gt;aria&lt;/code&gt; labels throughout the application. This ensures that screen reader users can navigate and interact with the platform fully.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Tripetto
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr2c0xv6qpqpexvlk2d0a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr2c0xv6qpqpexvlk2d0a.png" alt="Tripetto - Give life to forms and surveys" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;Tripetto is a visual survey tool that stands out for its unique flowchart-based form builder. It’s designed for building conversational-style forms and surveys.&lt;/p&gt;

&lt;h3&gt;
  
  
  Form Creation
&lt;/h3&gt;

&lt;p&gt;Tripetto’s flowchart interface allows users to create forms that feel more dynamic and interactive. It is especially useful for creating surveys with a conversational feel.&lt;/p&gt;

&lt;h3&gt;
  
  
  Form Filling
&lt;/h3&gt;

&lt;p&gt;Tripetto allows users to customize form colors, fonts, and choose from various ‘form faces’ that dramatically alter the form's appearance and functionality. While the ‘autoscroll’ face resembles Typeform and can feel gimmicky, the ‘chat’ face offers an engaging design but lacks practicality. The ‘classic’ face is the most user-friendly, providing a responsive experience with quick error feedback. Overall, Tripetto's form designs showcase a strong attention to detail and aesthetic appeal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Survey Data Analysis
&lt;/h3&gt;

&lt;p&gt;Tripetto does not offer any built-in solutions for accessing or visualizing form results after submission. Users must independently manage and analyze the submitted data without support from the platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;Tripetto offers several pricing options for its SDK. The cost for accessing the form runner is €900 per year, but this only covers one ‘form face’; additional licenses are required for each extra form face. If you also want to use the builder on your own webpages, the cheapest builder license is €699 per year, which includes standard question types and allows for five users. To enable custom question types, a more expensive builder license costing €3.900 per year is necessary. The most economical combination of the builder and runner licenses totals €1,599 per year.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accessibility
&lt;/h3&gt;

&lt;p&gt;Tripetto lacks information on its accessibility practices, and unfortunately, the platform fails to meet basic accessibility standards. The editor is not effectively navigable via keyboard, and screen readers struggle due to missing or incorrect ARIA tags. While the forms are somewhat keyboard accessible, they deviate significantly from standard keyboard controls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Each of these tools brings something unique to the table. SurveyJS survey software excels in customization and seamless backend integration, while Form.io is ideal for users requiring comprehensive data management. LimeSurvey is perfect for research-heavy projects, thanks to its robust data analysis capabilities. Tripetto shines with its conversational style, but falls short in accessibility. Ultimately, assessing your priorities - be it customization, ease of use, data management, or cost - will guide you to the survey solution that best fits your needs.&lt;/p&gt;

</description>
      <category>react</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Create a Poll and Visualize Collected Responses in Real Time</title>
      <dc:creator>SurveyJS</dc:creator>
      <pubDate>Sat, 22 Apr 2023 16:19:51 +0000</pubDate>
      <link>https://forem.com/_surveyjs/how-to-create-a-poll-and-visualize-collected-responses-in-real-time-4bi3</link>
      <guid>https://forem.com/_surveyjs/how-to-create-a-poll-and-visualize-collected-responses-in-real-time-4bi3</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftjcwnpetlvtpnrmzxtd3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftjcwnpetlvtpnrmzxtd3.png" alt="Image by pch.vector on Freepik" width="800" height="569"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.freepik.com/free-vector/internet-electronic-voting_6974903.htm#query=polls&amp;amp;position=0&amp;amp;from_view=keyword&amp;amp;track=sph" rel="noopener noreferrer"&gt;Image by pch.vector&lt;/a&gt; on Freepik&lt;/p&gt;

&lt;p&gt;In this blog post, we will guide you through all the steps to build a poll with SurveyJS Form Library and then visualize the results that are being submitted in real time with SurveyJS Dashboard. Plus — a sample React demo inside.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Power of Conducting Polls
&lt;/h2&gt;

&lt;p&gt;Running a poll is an effective way to measure public opinion on a particular issue or topic. By asking a representative sample of the population a set of questions on their views, pollsters can gather an accurate and actionable snapshot of what people think. Polls can also help identify trends in public opinion over time. By conducting regular polls on a particular issue or topic, pollsters can track how people's views are changing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://surveyjs.io/stay-updated/blog/create-poll-and-visualize-results-with-chart-that-updates-in-real-time" rel="noopener noreferrer"&gt;Read the full post&lt;/a&gt; on SurveyJS blog. &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>tutorial</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Client-Side vs Server-Side Form Input Validation</title>
      <dc:creator>SurveyJS</dc:creator>
      <pubDate>Tue, 18 Apr 2023 16:11:58 +0000</pubDate>
      <link>https://forem.com/_surveyjs/client-side-vs-server-side-form-input-validation-27lp</link>
      <guid>https://forem.com/_surveyjs/client-side-vs-server-side-form-input-validation-27lp</guid>
      <description>&lt;p&gt;Tired of dealing with invalid data submitted by users in your web forms? Then it's time for you to introduce input validation into your form creation workflow. In this article, we will explore pros and cons of client- and server-side validation features that SurveyJS has to offer, so that you can decide which one to use in your project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://surveyjs.io/stay-updated/blog/client-server-data-validation" rel="noopener noreferrer"&gt;Read the full article&lt;/a&gt; on SurveyJS blog. &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>opensource</category>
      <category>react</category>
    </item>
    <item>
      <title>No-code Editor for Domain Models</title>
      <dc:creator>SurveyJS</dc:creator>
      <pubDate>Mon, 03 Apr 2023 18:32:01 +0000</pubDate>
      <link>https://forem.com/_surveyjs/no-code-editor-for-domain-models-kgp</link>
      <guid>https://forem.com/_surveyjs/no-code-editor-for-domain-models-kgp</guid>
      <description>&lt;p&gt;&lt;a href="https://surveyjs.io/documentation/no-code-editor-for-domain-models" rel="noopener noreferrer"&gt;This article&lt;/a&gt; describes how SurveyJS can help streamline the form creation process in your team. The proposed solution allows you to generate client-side form code based on server-side domain models, and vice versa. Content creators who do not possess coding skills can edit the forms in a visual designer and deliver them to the end users without the need to involve the development team.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>react</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Form Input Validation: Ensure Valid, Meaningful, and Reliable Responses in Questionnaires and Online Forms</title>
      <dc:creator>SurveyJS</dc:creator>
      <pubDate>Thu, 23 Mar 2023 08:44:16 +0000</pubDate>
      <link>https://forem.com/_surveyjs/form-input-validation-ensure-valid-meaningful-and-reliable-responses-in-questionnaires-and-online-forms-h74</link>
      <guid>https://forem.com/_surveyjs/form-input-validation-ensure-valid-meaningful-and-reliable-responses-in-questionnaires-and-online-forms-h74</guid>
      <description>&lt;p&gt;Learn how to design an effective questionnaire and configure form field validation to improve the quality of your survey results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjji0928f0i2589t8li2f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjji0928f0i2589t8li2f.png" alt="SurveyJS: Form Input Validation" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A thoughtfully designed questionnaire can improve its completion rate and deliver a positive user experience. If your survey is clear and well structured, and questions are concise, survey takers will be willing to provide relevant and actionable data that you can use to derive valuable insights.&lt;/p&gt;

&lt;p&gt;But how do you accomplish this? How do you organize an online questionnaire that doesn't overwhelm respondents and instead makes their experience enjoyable?&lt;/p&gt;

&lt;h4&gt;
  
  
  Proper Completion Time
&lt;/h4&gt;

&lt;p&gt;Designing a questionnaire requires careful consideration of various factors. One of them is &lt;strong&gt;completion time&lt;/strong&gt;, especially when it comes to online surveys. To maximize participation rates, limit the survey to no more than 10 minutes, or even shorter for mobile device users - around 7 minutes.&lt;/p&gt;

&lt;h4&gt;
  
  
  Suitable Question Types
&lt;/h4&gt;

&lt;p&gt;Another critical aspect is selecting appropriate question types to ensure that the data collected will be suitable for further analysis and visual representation. Please refer to the &lt;a href="https://medium.com/@surveyjs/how-to-create-an-effective-survey-poll-or-quiz-and-increase-its-completion-rate-cce30282659f" rel="noopener noreferrer"&gt;How to Create an Effective Survey, Poll, or Quiz, and Increase its Completion Rate&lt;/a&gt; article to find out more on this topic.&lt;/p&gt;

&lt;h4&gt;
  
  
  Relevant Responses
&lt;/h4&gt;

&lt;p&gt;Data validity is another key factor to consider when designing a questionnaire. To ensure reliable data, identify the types of data you &lt;strong&gt;want&lt;/strong&gt; and &lt;strong&gt;do not want&lt;/strong&gt; to receive. This approach can help avoid uncertainties by clarifying the data expected from respondents. &lt;/p&gt;

&lt;p&gt;Different fields require different types of validation: validation for mandatory fields, numeric range validation for age or weight values, and file type validation for uploads in a specific file format, such as PDF, JPEG, or MP4.&lt;/p&gt;

&lt;p&gt;Using &lt;a href="https://surveyjs.io/" rel="noopener noreferrer"&gt;SurveyJS&lt;/a&gt;, you can apply these and other data validation settings to your survey questions, ensuring that respondents provide accurate and reliable data. In the following sections, we will review some possible data validation options available with SurveyJS, which can help improve the quality of your survey data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Form Input Validation with SurveyJS
&lt;/h2&gt;

&lt;p&gt;SurveyJS is an open-source JavaScript library for building complex forms and surveys in &lt;a href="https://surveyjs.io/form-library/documentation/overview" rel="noopener noreferrer"&gt;React, Angular, Vue.js, Knockout, and jQuery&lt;/a&gt;. SurveyJS offers a variety of input validation options that can help ensure that respondents provide valid answers. &lt;/p&gt;

&lt;h3&gt;
  
  
  Mandatory Questions
&lt;/h3&gt;

&lt;p&gt;Set the &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/question#isRequired" rel="noopener noreferrer"&gt;isRequired&lt;/a&gt; property value to &lt;code&gt;true&lt;/code&gt; to ensure that a user doesn't leave a question unanswered before submitting a survey.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "type": "text",
  "name": "last-name",
  "title": "Last name",
  "isRequired": true
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3a35n5rcq3bg1lpfkbu5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3a35n5rcq3bg1lpfkbu5.png" alt="SurveyJS: Required Questions" width="800" height="312"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://surveyjs.io/form-library/examples/covid-19-screening-form-template/reactjs" rel="noopener noreferrer"&gt;Demo: COVID-19 Screening Form&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If you use &lt;a href="https://surveyjs.io/form-library/examples/single-selection-matrix-table-question/reactjs" rel="noopener noreferrer"&gt;Single-Choice Matrix&lt;/a&gt; and you want to ensure that a user addresses all question in the rows, enable the &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/matrix-table-question-model#isAllRowRequired" rel="noopener noreferrer"&gt;isAllRowRequired&lt;/a&gt; option.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ppxb8myyv2li5tdqbji.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ppxb8myyv2li5tdqbji.png" alt="SurveyJS: Required Matrix Rows" width="800" height="378"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://surveyjs.io/form-library/examples/single-selection-matrix-table-question/reactjs" rel="noopener noreferrer"&gt;Demo: Single-Selection Matrix&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Restrict the Number of Choices to Select
&lt;/h3&gt;

&lt;p&gt;If you want to limit the number of choice options a respondent can select in Multiple-Selection &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/checkbox-question-model" rel="noopener noreferrer"&gt;Checkbox&lt;/a&gt; and &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/dropdown-tag-box-model#maxSelectedChoices" rel="noopener noreferrer"&gt;TagBox&lt;/a&gt; questions, you can use the &lt;code&gt;maxSelectedChoices&lt;/code&gt; property.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "type": "checkbox",
  "name": "product-aspects",
  "title": "Key Features",
  "description": "These are some important aspects of the product. Select three features you find most important.",
  "choices": [
    "Technical support",
    "Price",
    "Delivery option",
    "Quality",
    "Ease of use",
    "Product warranties"
  ],
  "maxSelectedChoices": 3
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once a user selects the maximum number of items allowed, further selection is disabled for that question.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7na6qir7v40f720iulim.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7na6qir7v40f720iulim.png" alt="SurveyJS: Limit Selected Choices" width="800" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Numeric Ranges
&lt;/h3&gt;

&lt;p&gt;You can use the &lt;code&gt;min&lt;/code&gt; and &lt;code&gt;max&lt;/code&gt; properties to set numeric ranges for questions that require a numerical input type.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "name": "number",
  "type": "text",
  "title": "Enter a number from 0 to 100",
  "inputType": "number",
  "min": 0,
  "max": 100,
  "defaultValue": 0,
  "isRequired": true
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4lzhzz9hn84za9r18oam.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4lzhzz9hn84za9r18oam.png" alt="SurveyJS: Numeric Range Validation" width="800" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://surveyjs.io/form-library/examples/numeric-entry-question/reactjs" rel="noopener noreferrer"&gt;Demo: Numeric Entry&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Text Length
&lt;/h3&gt;

&lt;p&gt;By setting the minimum or maximum length values for text entry fields, you can control the number of characters users can enter. &lt;/p&gt;

&lt;p&gt;The minimum text length value can help ensure that users provide enough data and prevent them from submitting invalid and eventually useless responses.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "type": "comment",
  "name": "service_improvements",
  "title": "How can we improve our service?",
  "validators": [
    {
      "type": "text",
      "text": "Please provide more information",
      "minLength": 10
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr52ncduz5qszxt0zm0lq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr52ncduz5qszxt0zm0lq.png" alt="SurveyJS: Minimum Text Length Validation" width="800" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Setting the maximum text length value, on the other hand, can help prevent users from submitting redundant details in their answers. This will keep survey responses concise and focused on relevant information.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "type": "comment",
  "name": "service_improvements",
  "title": "How can we improve our service?",
  "maxLength": 100
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc3372lou75isgkc0vm6n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc3372lou75isgkc0vm6n.png" alt="SurveyJS: Maximum Text Length Validation" width="800" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Maximum File Size
&lt;/h3&gt;

&lt;p&gt;You can limit the size of files that can be uploaded as responses to questions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "type": "file",
  "title": "Please upload your files",
  "name": "files",
  "storeDataAsText": false,
  "allowMultiple": true,
  "maxSize": 102400
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftsg837bq3ce8xbx307ts.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftsg837bq3ce8xbx307ts.png" alt="SurveyJS: Upload File Size" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://surveyjs.io/form-library/examples/file-upload/reactjs#content-code" rel="noopener noreferrer"&gt;Demo: File question - Upload Files to a Server&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Accepted File Types
&lt;/h3&gt;

&lt;p&gt;When configuring a File question type, use the &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/file-model#acceptedTypes" rel="noopener noreferrer"&gt;acceptedTypes&lt;/a&gt; property to restrict the file types that can be uploaded.&lt;/p&gt;

&lt;h3&gt;
  
  
  Regular Expressions
&lt;/h3&gt;

&lt;p&gt;You can use regular expressions to implement more sophisticated logic and validate such input values as email addresses, phone numbers, or passwords.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "name": "user-password",
  "type": "text",
  "title": "Password",
  "inputType": "password",
  "description": "Enter a password that contains at least one upper-case, one lower-case letter, a digit, and a special character",
  "isRequired": true,
  "validators": [
    {
      "type": "regex",
      "regex": /(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s)(?=.*[!-@#$*])/,
      "text": "Your password must contain at least one upper-case, one lower-case letter, a digit, and a special character"
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0isbdcxo5tyfysk40ql.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0isbdcxo5tyfysk40ql.png" alt="SurveyJS: RegEx Text Validation" width="800" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://surveyjs.io/form-library/examples/javascript-form-validation/reactjs" rel="noopener noreferrer"&gt;Demo: Form Validation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Custom Validation Functions
&lt;/h3&gt;

&lt;p&gt;Validation functions can be useful in verifying more detailed responses. For instance, when it comes to email address, you may want to validate not only that the entered value conforms to the email format but also that it belongs to the domain of a specific company.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://surveyjs.io/form-library/examples/add-custom-input-validation/reactjs" rel="noopener noreferrer"&gt;Demo: Custom Form Validation Using an Event&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Server-Side Validation
&lt;/h3&gt;

&lt;p&gt;Use server-side validation in addition to client-side validation to prevent malicious submissions or errors. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://surveyjs.io/form-library/examples/javascript-server-side-form-validation/reactjs" rel="noopener noreferrer"&gt;Demo: Server-Side Form Validation Using an Event&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Consider the following recommendations to ensure that respondents provide accurate data while taking your survey.&lt;/p&gt;

&lt;h4&gt;
  
  
  Validate All Fields
&lt;/h4&gt;

&lt;p&gt;Ensure that all fields have validation on, including optional fields. This helps prevent incomplete submissions and errors and ensures that most of the information provided is valid.&lt;/p&gt;

&lt;h4&gt;
  
  
  Provide Help Text
&lt;/h4&gt;

&lt;p&gt;SurveyJS highlights a field with an error and displays an error message next to this field.&lt;/p&gt;

&lt;p&gt;In addition, you can customize error messages and provide clear instructions on fixing the error. Use plain language and avoid technical jargon.&lt;/p&gt;

&lt;h4&gt;
  
  
  Use Real-Time Validation
&lt;/h4&gt;

&lt;p&gt;Real-time validation helps users correct errors as they type rather than waiting until the form is submitted. Set the &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#checkErrorsMode" rel="noopener noreferrer"&gt;checkErrorsMode&lt;/a&gt; property to &lt;code&gt;onValueChanged&lt;/code&gt; to validate user responses as soon as users provide answers.&lt;/p&gt;

&lt;p&gt;Lastly, always test your survey with a small group of people (ideally - from the intended target group). This ensures that the survey is clear and easy to understand and can help detect and correct errors or ambiguities in questions and choice options before it reaches the main target audience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Designing effective surveys requires both skill and creativity. SurveyJS offers a wide selection of tools to help you create more engaging and insightful surveys and online forms.&lt;/p&gt;

</description>
      <category>inputvalidation</category>
      <category>validation</category>
      <category>surveying</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How to create a Web Development Client Questionnaire with a TOC and add it to your JS application using SurveyJS.</title>
      <dc:creator>SurveyJS</dc:creator>
      <pubDate>Thu, 16 Mar 2023 13:50:59 +0000</pubDate>
      <link>https://forem.com/_surveyjs/how-to-create-a-web-development-client-questionnaire-with-a-toc-navigation-and-add-it-to-your-js-application-using-surveyjs-58fl</link>
      <guid>https://forem.com/_surveyjs/how-to-create-a-web-development-client-questionnaire-with-a-toc-navigation-and-add-it-to-your-js-application-using-surveyjs-58fl</guid>
      <description>&lt;p&gt;A step-by-step guide on how to automate data collection from your clients with an on-page website intake form.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7phdv9dvvl3z0me6cw0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7phdv9dvvl3z0me6cw0.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s a web development client questionnaire?
&lt;/h2&gt;

&lt;p&gt;A web development, or a web design, client questionnaire is a website intake form that consists of a set of questions that a web developer asks their client to get a better understanding as to what their expectations are towards a website they are ordering, e.g. their goals, preferences, the timeline etc. A website intake form typically covers such topics as a client’s target audience, branding, design preferences, functionality requirements, content strategy, and budget. By gathering this information, a web developer can create a website mockup that addresses the client’s needs and ensures that the final product meets their expectations. A well-developed questionnaire can also help both sides save time, establish clear communication and prevent misunderstandings throughout the development process.&lt;/p&gt;

&lt;p&gt;Initially, client intake forms were in paper format. Nowadays, when the world is moving to digitalization and automation of any paper routine, it’s hard to imagine a web developer going to a client with a pen and a printed out paper form.&lt;/p&gt;

&lt;p&gt;In this article we are going to create a web design client questionnaire using &lt;a href="https://surveyjs.io/create-free-survey" rel="noopener noreferrer"&gt;a free full scale demo of the Survey Creator library&lt;/a&gt;. This demo tool will automatically generate a &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model" rel="noopener noreferrer"&gt;survey model&lt;/a&gt; for us that defines the contents and layout of a form in JSON format. You can then add this form to your website using &lt;a href="https://surveyjs.io/form-library" rel="noopener noreferrer"&gt;SurveyJS Form Library&lt;/a&gt; and have it rendered by any JavaScript framework you use. Once a form is incorporated into a page, you will be able to invite your customers to fill it out online right on your website, and then use the received results as a starting point in further more detailed discussion during a meeting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why choose SurveyJS Form Library to make a web form and collect responses?
&lt;/h2&gt;

&lt;p&gt;SurveyJS is a fast, versatile, free, and open-source (MIT license) &lt;a href="https://surveyjs.io/form-library" rel="noopener noreferrer"&gt;JavaScript client-side library&lt;/a&gt; for &lt;a href="https://surveyjs.io/form-library/documentation/get-started-react" rel="noopener noreferrer"&gt;React&lt;/a&gt;, &lt;a href="https://surveyjs.io/form-library/documentation/get-started-angular" rel="noopener noreferrer"&gt;Angular&lt;/a&gt;, &lt;a href="https://surveyjs.io/form-library/documentation/get-started-vue" rel="noopener noreferrer"&gt;Vue.js&lt;/a&gt;, &lt;a href="https://surveyjs.io/form-library/documentation/get-started-knockout" rel="noopener noreferrer"&gt;Knockout&lt;/a&gt;, and &lt;a href="https://surveyjs.io/form-library/documentation/get-started-jquery" rel="noopener noreferrer"&gt;jQuery&lt;/a&gt; that can be used to build forms and surveys of any complexity. It has a data-driven approach — fully dynamic surveys defined as JSON schemas, with templating for UI elements. SurveyJS renders a form on a page of your website, collects responses from users and sends the survey data to your database. Since all survey data is in industry-standard JSON format, the frontend and the backend are separated, so you can use &lt;a href="https://surveyjs.io/documentation/backend-integration" rel="noopener noreferrer"&gt;any server + database combination&lt;/a&gt; with it.&lt;/p&gt;

&lt;p&gt;SurveyJS allows for great customization and flexibility. You have total control over the look and feel of your forms — you can select from a variety of built-in themes and personalize them with custom CSS code. It also supports &lt;a href="https://surveyjs.io/form-library/examples/survey-localization/reactjs" rel="noopener noreferrer"&gt;automatic survey localization&lt;/a&gt; and the integration of third-party JavaScript components, such as &lt;a href="https://surveyjs.io/form-library/examples/custom-widget-bootstrapdatepicker/reactjs" rel="noopener noreferrer"&gt;bootstrap-datepicker&lt;/a&gt; or &lt;a href="https://surveyjs.io/form-library/examples/control-data-entry-formats-with-input-masks/reactjs" rel="noopener noreferrer"&gt;Inputmask&lt;/a&gt;, and many others.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why self-host survey data instead of using online survey platforms?
&lt;/h2&gt;

&lt;p&gt;Self-hosting survey data — both survey contents and their results — has several benefits over using third-party survey platforms. One of the main benefits is increased control of the data flow between server and client without any third-party involved. Only you decide where and how the data is stored, who has access to it, and how it is transferred. This is especially important when it comes to handling sensitive or confidential commercial information, as it can help ensure the privacy and security of the data. With SurveyJS, you have full ownership of the survey data and can finally avoid using third-party black box SaaS platforms.&lt;/p&gt;

&lt;p&gt;Another important advantage is cost savings. Online survey platforms often charge a monthly fee for their services, which can add up over time. By self-hosting your survey data, you can avoid these fees at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions to ask in a Website Intake Form and best question types to choose
&lt;/h2&gt;

&lt;p&gt;Most of the questions in a website intake form are open-ended questions, meaning that they don’t have predefined choice options. Among the most popular open-ended question types that SurveyJS ships with is a &lt;a href="https://surveyjs.io/form-library/examples/text-entry-question/reactjs" rel="noopener noreferrer"&gt;Text Entry field&lt;/a&gt;. It’s suitable for short (hopefully concise) answers. You can use it to, for example ask a client the following questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is the purpose of the website?&lt;/li&gt;
&lt;li&gt;Who is the target audience for the website?&lt;/li&gt;
&lt;li&gt;What is the budget for the website project?&lt;/li&gt;
&lt;li&gt;Who will be responsible for maintaining and updating the website?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To query a client about the project due date, you can either integrate a third-party date picker library, like &lt;a href="https://jqueryui.com/datepicker/" rel="noopener noreferrer"&gt;jQuery datepicker&lt;/a&gt; or &lt;a href="https://github.com/uxsolutions/bootstrap-datepicker/" rel="noopener noreferrer"&gt;Bootstrap datepicker&lt;/a&gt;, or simply change an input type to “date” to enable the built-in calendar as shown below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffhrhobjz41nw8ruvf94.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffhrhobjz41nw8ruvf94.png" alt="Image description" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another popular question type is &lt;a href="https://surveyjs.io/form-library/examples/add-open-ended-question-to-a-form/reactjs#content-code" rel="noopener noreferrer"&gt;Text Area or a Comment filed&lt;/a&gt;. This type of question provides more space for the respondent to write a longer or more detailed answer and would be suitable for such questions such as the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What features and functionality do you want on the website?&lt;/li&gt;
&lt;li&gt;Is there a content strategy for the website?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’d like your potential client to share their color preference for a certain element of a new website, for example the background color that would be shared among all pages, you can use yet another question type that SurveyJS offers out-of-the-boxt -a &lt;a href="https://surveyjs.io/form-library/examples/color-input-question/reactjs" rel="noopener noreferrer"&gt;Color Picker question&lt;/a&gt;. It allows respondents to enter a color in RGB, HSL, and HEX formats or select it with a visual interface.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkha4kf3w8h8qexpmf7yo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkha4kf3w8h8qexpmf7yo.png" alt="Image description" width="713" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In case a client would like to have their logo unchanged and it includes several different colors, you can select a &lt;a href="https://surveyjs.io/form-library/examples/multiple-text-box-question/reactjs" rel="noopener noreferrer"&gt;Multiple Text Entry question&lt;/a&gt; and change the input type for each entry to “color”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0t4rhn2v5ztj5j7pi395.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0t4rhn2v5ztj5j7pi395.png" alt="Image description" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To enable a client to upload a file with a company logo, or any other existing branding guidelines and materials, add a &lt;a href="https://surveyjs.io/form-library/examples/file-upload/reactjs" rel="noopener noreferrer"&gt;File Upload question&lt;/a&gt; type to your form and restrict the allowed format to the one you prefer, for example SVG.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F01jw231e7vswg4f0w0jw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F01jw231e7vswg4f0w0jw.png" alt="Image description" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up a TOC (Table of Contents)
&lt;/h2&gt;

&lt;p&gt;The purpose of a table of contents is to provide a client with a quick overview of the content and organization of the questionnaire and allow them to easily navigate to a specific question they want. Adding a TOC to a questionnaire (especially if it’s a long one) can also positively affect the completion rate as respondents can see in advance how many questions there are in a form, what those questions are, and how many remain unanswered.&lt;/p&gt;

&lt;p&gt;SurveyJS Form Library has a &lt;a href="https://surveyjs.io/form-library/examples/toc-feature/reactjs" rel="noopener noreferrer"&gt;built-in TOC feature&lt;/a&gt; that can be enabled and disabled and &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#tocLocation" rel="noopener noreferrer"&gt;repositioned to the left or right&lt;/a&gt; at your preference using the &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#showTOC" rel="noopener noreferrer"&gt;showTOC property&lt;/a&gt; with ‘true’ or ‘false’ values respectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  JSON ‘schema’
&lt;/h2&gt;

&lt;p&gt;As we already mentioned earlier, SurveyJS uses JSON objects to define the &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model" rel="noopener noreferrer"&gt;survey data model&lt;/a&gt;. As we were adding the questions to a web design client questionnaire in &lt;a href="https://surveyjs.io/create-free-survey" rel="noopener noreferrer"&gt;a no-code UI of the Survey Creator demo&lt;/a&gt;, it automatically generated such a schema in JSON format for us. Let’s take a look at it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
{
  title: "Website Intake Form",
  description:
    "Please fill out the form so that we can have better understanding as to what your expectations are of a new website.",
  logo:
    "https://api.surveyjs.io/private/Surveys/files?name=01deec1e-60dc-4438-8b8e-9a3f8a1afbbe",
  logoWidth: "270px",
  logoHeight: "120px",
  logoPosition: "right",
  pages: [
    {
      name: "page1",
      elements: [
        {
          type: "text",
          name: "What is the purpose of the website?",
          title: "What is the purpose of the website?"
        },
        {
          type: "text",
          name: "Who is the target audience for the website?",
          title: "Who is the target audience for the website?"
        },
        {
          type: "text",
          name: "What is the budget for the website project?",
          title: "What is the budget for the website project?",
          placeholder: "Enter a value in USD"
        },
        {
          type: "text",
          name:
            "Who will be responsible for maintaining and updating the website?",
          title:
            "Who will be responsible for maintaining and updating the website?"
        },
        {
          type: "text",
          name: "What is the due date for the website project?",
          title: "What is the due date for the website project?",
          inputType: "date"
        },
        {
          type: "comment",
          name:
            "What features and functionality does the client want on the website?",
          title:
            "What features and functionality does the client want on the website?"
        },
        {
          type: "file",
          name: "Please upload your company logo in SVG format.",
          title: "Please upload your company logo in SVG format.",
          acceptedTypes: ".svg"
        },
        {
          type: "multipletext",
          name: "Please specify the colors used in the company logo?",
          title: "Please specify the colors used in the company logo?",
          items: [
            {
              name: "Background color",
              isRequired: true,
              inputType: "color",
              title: "Background color"
            },
            {
              name: "Text color",
              isRequired: true,
              inputType: "color",
              title: "Text color"
            }
          ]
        },
        {
          type: "text",
          name:
            "Please specify the prefered background color for a new website.",
          title:
            "Please specify the prefered background color for a new website.",
          inputType: "color"
        }
      ]
    }
  ],
  showTOC: true,
  tocLocation: "right",
  questionsOnPageMode: "questionPerPage",
  widthMode: "static",
  width: "800"
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, each &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/text-entry-question-model" rel="noopener noreferrer"&gt;text entry field&lt;/a&gt; is simply an object defined with the type property set to “text” and added to the elements array. The &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/text-entry-question-model#inputType" rel="noopener noreferrer"&gt;inputType property&lt;/a&gt; is used to specify the input type. We only used a few values in our questionnaire. Please refer to the Form Library API reference to see all &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/text-entry-question-model#inputType" rel="noopener noreferrer"&gt;accepted values for the inputType property&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To demonstrate how it looks, here’s a ready-to-use multi-step Website Intake Form with a TOC that we made with &lt;a href="https://surveyjs.io/form-library" rel="noopener noreferrer"&gt;SurveyJS Form Library&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/quizzical-farrell-n1nuls"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to start?
&lt;/h2&gt;

&lt;p&gt;Once you have decided on the type of data you want to obtain from your client and selected appropriate question types, you are ready &lt;a href="https://surveyjs.io/create-free-survey" rel="noopener noreferrer"&gt;to generate a survey JSON schema&lt;/a&gt; or modify the one we’ve just created. You then need to install and configure (using that JSON file) a framework-specific npm package by following one of the &lt;a href="https://surveyjs.io/form-library/documentation/get-started" rel="noopener noreferrer"&gt;dedicated getting started guides&lt;/a&gt; available for each frontend technology, and implement the backend. To help you get a backend up and running quickly, SurveyJS has prepared &lt;a href="https://surveyjs.io/backend-integration/examples" rel="noopener noreferrer"&gt;demo examples for ASP.NET Core, NodeJS, PHP, and WordPress&lt;/a&gt; that you can use for free.&lt;/p&gt;

&lt;p&gt;If you want to know more about the architecture of all SurveyJS libraries, please refer to the “&lt;a href="https://surveyjs.io/documentation/surveyjs-architecture" rel="noopener noreferrer"&gt;SurveyJS Architecture&lt;/a&gt;” guide.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Web development client questionnaire serves as a tool for collecting important information about client’s expectations, preferences, existing guidelines, and so on. Interviewing your potential clients with such a tool before proceeding to website development can save time during a meeting for both sides — a web developer can get ready by preparing further questions, while enabling a client to have more time to think about the information they are asked and provide well-considered answers. By adding SurveyJS to your web application, you can make the client interviewing process not only faster, but more secure — as it lets you stay in control of all sensitive respondent data you receive.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>form</category>
    </item>
    <item>
      <title>How to create an online quiz or assessment test using SurveyJS and add scoring and timing to it (Part 2)</title>
      <dc:creator>SurveyJS</dc:creator>
      <pubDate>Tue, 07 Mar 2023 14:49:27 +0000</pubDate>
      <link>https://forem.com/_surveyjs/how-to-create-an-online-quiz-or-assessment-test-using-surveyjs-and-add-scoring-and-timing-to-it-part-2-3maf</link>
      <guid>https://forem.com/_surveyjs/how-to-create-an-online-quiz-or-assessment-test-using-surveyjs-and-add-scoring-and-timing-to-it-part-2-3maf</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdqbgjb7ky7zcmtmva5q8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdqbgjb7ky7zcmtmva5q8.png" alt="Add scoring to a survey, quiz, or test - SurveyJS" width="720" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Survey Creator to Save the Day
&lt;/h2&gt;

&lt;p&gt;Writing a few dozen lines in JSON to configure a 3-question geography quiz isn't a big deal. But what if it is a multi-page assessment test or several of them? Then, manual coding is simply not an option, especially if there are other ways to create such complex tests (!) without a developer involved.&lt;/p&gt;

&lt;p&gt;We are talking about &lt;a href="https://surveyjs.io/survey-creator" rel="noopener noreferrer"&gt;Survey Creator&lt;/a&gt;, an embeddable GUI-based form builder that allows you to have a self-hosted tool for creating, storing, and analyzing any educational assessment materials. Whether it is a pop quiz at the end of a class or a midterm exam - your end users, e.g., teachers, can configure the contents and appearance of such forms easily.&lt;/p&gt;

&lt;h3&gt;
  
  
  Auto-generate the form model in JSON
&lt;/h3&gt;

&lt;p&gt;To demonstrate the functionally of Survey Creator, let's head over to its &lt;a href="https://surveyjs.io/create-free-survey" rel="noopener noreferrer"&gt;free full scale demo&lt;/a&gt;. Drop a radio button group question from the toolbox on the left onto the design surface to create a form.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4sg3p1j6d6ppsxcug1l8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4sg3p1j6d6ppsxcug1l8.png" alt="Free Survey Tool UI - SurveyJS | Adding a radio button group question" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, add a title, description, and assign values to the first question (“How many continents are there?” with four choice options: 4, 6, 5, and 7) to turn this form into our sample &lt;strong&gt;Geography test&lt;/strong&gt;. The folded tabs on the right make up the Property grid, where users can change the question, &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/panel-model" rel="noopener noreferrer"&gt;panel&lt;/a&gt;, and form settings.&lt;/p&gt;

&lt;p&gt;We will not focus on the basic functionality of the Survey Creator interface this time. Please refer to the &lt;a href="https://surveyjs.io/survey-creator/documentation/end-user-guide" rel="noopener noreferrer"&gt;dedicated end-user guide for Survey Creator&lt;/a&gt; for details.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fltx522xx8413pkpsc0ns.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fltx522xx8413pkpsc0ns.png" alt="The Property grid of the Survey Creator UI — SurveyJS" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Set the Correct Answer for a Question
&lt;/h3&gt;

&lt;p&gt;The default functionality of the Property Grid allows you to set a correct answer for a question. To do this, switch to the question settings level, click the Set Correct Answer button under Data, and select the right answer in the Correct Answer popup, then click Apply.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswmdyflvie7re2avivop.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswmdyflvie7re2avivop.png" alt="How to set the correct answer for a question — SurveyJS" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s add a few more questions to our test and move on to setting up timing. As we can include any question type supported by the SurveyJS Form Library, let’s add a dropdown menu to the same page and another radio button group to the second one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flamxub1sa8d5c5v47c1w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flamxub1sa8d5c5v47c1w.png" alt="Add a Single Selection Dropdown menu to a test — SurveyJS" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Setup time limits in Survey Creator UI
&lt;/h3&gt;

&lt;p&gt;To specify time limit, select survey-level settings, and under the Timer/Quiz section of the Property Grid, enter the number of seconds you want to allow for each page and/or for the entire survey to complete. You can also configure the time visibility and position to make sure students can self-pace to answer all questions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fky35e3v8zuer5jf1xt25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fky35e3v8zuer5jf1xt25.png" alt="How to time a test in Survey Creator UI — SurveyJS" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Survey Complete section
&lt;/h3&gt;

&lt;p&gt;Like most other form settings, customized feedback pages can also be configured in the graphical interface of Survey Creator. If you only want to calculate scores by comparing choices with the predefined correct answers, then at the survey level setting, select the Survey Complete section and enter the rule in the Survey Complete markup using markup tags.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqqyfnkao6yl8a0pf3bzp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqqyfnkao6yl8a0pf3bzp.png" alt="Configure a custom test result page — SurveyJS" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In order to display a personalized feedback based on the number of correct answers a student provided, in the same section of the Property Grid add a Dynamic Survey Complete page markup and specify an expression that triggers it as shown in the example below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhbr623orfxe92p53entd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhbr623orfxe92p53entd.png" alt="Create a dynamic test result page — SurveyJS" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's scoring?
&lt;/h2&gt;

&lt;p&gt;Scoring is the process of evaluating or assigning a numerical value or score to a particular question of a test, exam, quiz, or other assessment form or to a single-choice option of such a question. It involves applying rules or criteria to assess the quality, quantity, or level of performance of the question or item being scored.&lt;/p&gt;

&lt;p&gt;Scoring has various fields of application, including academic or professional settings, sports, games, or contests. In education, for example, scoring is used to assess knowledge, skills, or abilities of students in a particular subject or course. Scores can be used to compare students’ performance, determine grades or rankings, or provide feedback for improvement. In the banking sector, scoring can help evaluate loan applicants based on their answers and sort out trustworthy ones.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Add a Scoring to a SurveyJS Form
&lt;/h3&gt;

&lt;p&gt;1.1 By default, the Property Grid doesn’t include a &lt;code&gt;score&lt;/code&gt; property. &lt;br&gt;
To &lt;a href="https://surveyjs.io/survey-creator/documentation/property-grid#add-custom-properties-to-the-property-grid" rel="noopener noreferrer"&gt;add a custom property to the Property Grid&lt;/a&gt;, we need to call the &lt;code&gt;addProperty(questionType, propertySettings)&lt;/code&gt; method on the &lt;code&gt;Survey.Serializer&lt;/code&gt; object. The only difference between adding a custom &lt;code&gt;score&lt;/code&gt; property to a question and to a choice option is the class you add it to. Since only a single answer is correct in a &lt;a href="https://surveyjs.io/form-library/examples/create-a-scored-quiz/reactjs" rel="noopener noreferrer"&gt;scored quiz&lt;/a&gt;, a score property is added to a &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/question" rel="noopener noreferrer"&gt;Question&lt;/a&gt; class. On the contrary, there are no correct answers in a &lt;a href="https://surveyjs.io/form-library/examples/create-a-scored-survey/reactjs" rel="noopener noreferrer"&gt;scored survey&lt;/a&gt;, so a custom &lt;code&gt;score&lt;/code&gt; property needs to be added to the &lt;code&gt;ItemValue&lt;/code&gt; class. Compare the following code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To add a custom &lt;code&gt;score&lt;/code&gt; property to questions:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Serializer } from “survey-core”;

Serializer.addProperty("question", {
   name: "score:number"
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;To add a custom &lt;code&gt;score&lt;/code&gt; property to choice options:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Serializer } from “survey-core”;

Serializer.addProperty("itemvalue", {
   name: "score:number"
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;1.2 Now when the score property is serialized and included in the survey JSON schema, you need to assign its values for each question, the same way we specified the &lt;code&gt;correctAnswer&lt;/code&gt; property earlier. Here is how the first question of our sample test looks like with both properties configured:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "type": "radiogroup",
  "name": "count_continents",
  "score": 5,
  "title": "How many continents are there?",
  "correctAnswer": "Item 7",
  "choices": [
    "4",
    "6",
    "5",
    "7"
  ],
  "colCount": 2
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Calculate the Total Score
&lt;/h3&gt;

&lt;p&gt;1.3 To sum up the total score, you need to handle the &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#onComplete" rel="noopener noreferrer"&gt;onComplete&lt;/a&gt; event and use the following &lt;code&gt;calculateTotalScore&lt;/code&gt; helper function with a question’s &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/question#isAnswerCorrect" rel="noopener noreferrer"&gt;isAnswerCorrect&lt;/a&gt; method, which checks if the question was answered correctly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function calculateTotalScore (data) {
  var totalScore = 0;
  Object.keys(data).forEach((qName) =&amp;gt; {
    const question = survey.getQuestionByValueName(qName);
    if (question.isAnswerCorrect()) {
      if (!!question.score) {
        totalScore += question.score;
      }
    }
  });
  return totalScore;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Refer to this &lt;a href="https://surveyjs.io/form-library/examples/create-a-scored-quiz/reactjs" rel="noopener noreferrer"&gt;free demo showing how to configure a scored quiz&lt;/a&gt; to learn how to calculate the maximum score with the &lt;code&gt;calculateMaxScore&lt;/code&gt; helper function.&lt;/p&gt;

&lt;p&gt;1.4 Finally, once the total score has been calculated, we need to modify the &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#completedHtmlOnCondition" rel="noopener noreferrer"&gt;completedHtmlOnCondition&lt;/a&gt; array by using different placeholders in the expression property that triggers a custom markup. Since we don’t simply count correct or incorrect answers but points assigned to each correct answer, the arguments change to &lt;code&gt;{totalScore}&lt;/code&gt; or &lt;code&gt;{maxScore}&lt;/code&gt; etc. Here is an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const surveyJson = {
  ...
  completedHtmlOnCondition: [{
    expression: "{totalScore} &amp;gt; 10",
    html: "&amp;lt;h4&amp;gt;Congratulations! You got {totalScore} points and passed the test. Well done!&amp;lt;/h4&amp;gt;"
  }]
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  A Basic Geography Test Demo
&lt;/h2&gt;

&lt;p&gt;You can now see our basic Geography Test built with Survey Creator in action. Click “Open Sandbox” to run free demo:&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/laughing-lumiere-yvnmg8?view=preview"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;SurveyJS offers a wide range of built-in features for online tests and quizzes, including timing, scoring, a custom feedback or &lt;a href="https://surveyjs.io/form-library/documentation/design-survey/create-a-quiz#set-up-a-start-page" rel="noopener noreferrer"&gt;start page&lt;/a&gt;, and more. You can manually write a form model in JSON (please consult with the &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model" rel="noopener noreferrer"&gt;Form Library API references&lt;/a&gt;), run it for free in your app, and &lt;a href="https://surveyjs.io/form-library/documentation/handle-survey-results-store" rel="noopener noreferrer"&gt;store the results in your own database&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;However, if the complexity and number of assessment forms you deal with are significant, you might want to leverage the drag-and-drop UI of Survey Creator - a self-hosted form builder tool, which ships with a &lt;a href="https://surveyjs.io/survey-creator" rel="noopener noreferrer"&gt;free full scale demo&lt;/a&gt;. Once added to your application, Survey Creator auto-generates a form model for you while your end users configure the contents and layout of a form in a no-code UI. The generated form is then stored and loaded from your database in the same JSON format and is rendered in your app.&lt;/p&gt;

&lt;p&gt;The Creator UI is fully customizable, you can tailor it to the needs of your end users to make it even more pleasant and easy to work with. &lt;a href="https://surveyjs.io/survey-creator/examples/add-properties-to-property-grid/reactjs" rel="noopener noreferrer"&gt;Add&lt;/a&gt;, &lt;a href="https://surveyjs.io/survey-creator/examples/removeproperties/reactjs" rel="noopener noreferrer"&gt;remove&lt;/a&gt; or &lt;a href="https://surveyjs.io/survey-creator/examples/hide-category-from-property-grid/reactjs" rel="noopener noreferrer"&gt;hide properties&lt;/a&gt; of survey elements in the Property Grid, modify visibility of default tabs or add your custom tabs or buttons — you name it.&lt;/p&gt;

&lt;p&gt;With SurveyJS it’s never been easier to create, modify and run scored tests and surveys. Select your preferred frontend technology and &lt;a href="https://surveyjs.io/form-library/documentation/get-started" rel="noopener noreferrer"&gt;get started&lt;/a&gt; with your first Survey JS assessment form today!&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>oop</category>
      <category>discuss</category>
      <category>tooling</category>
    </item>
    <item>
      <title>How to Create an Online Quiz or Assessment test using SurveyJS and add Scoring and Timing to It (Part 1)</title>
      <dc:creator>SurveyJS</dc:creator>
      <pubDate>Thu, 02 Mar 2023 10:05:47 +0000</pubDate>
      <link>https://forem.com/_surveyjs/how-to-create-an-online-quiz-or-assessment-test-using-surveyjs-and-add-scoring-and-timing-to-it-part-1-520e</link>
      <guid>https://forem.com/_surveyjs/how-to-create-an-online-quiz-or-assessment-test-using-surveyjs-and-add-scoring-and-timing-to-it-part-1-520e</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk9o3lnmok0oxonthuclk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk9o3lnmok0oxonthuclk.png" alt="Create an online assessment test with a limited timing - SurveyJS" width="800" height="591"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction to the SurveyJS libraries and their benefits in education.
&lt;/h2&gt;

&lt;p&gt;Online quizzes are a great way to engage your students and test their knowledge on a particular topic. With &lt;a href="https://surveyjs.io/" rel="noopener noreferrer"&gt;SurveyJS&lt;/a&gt; you can create multiple online assessment forms, add timing and scoring to them, customize their look, and provide immediate and personalized feedback to each student once they completed a test. &lt;/p&gt;

&lt;p&gt;In the first part of the article, we will explore the SurveyJS product family and guide you through the process of creating a timed online quiz using SurveyJS Form Library. The second part will be devoted to various scoring features that the Survey Creator library has to offer, including how to assign a score to a certain question or to each or some of its choice options, calculate the total score, and more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why choose SurveyJS for online assessment forms?
&lt;/h2&gt;

&lt;p&gt;SurveyJS is a product family of four open-source JavaScript libraries that enable you to build a full-cycle form management system within your in-house infrastructure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://surveyjs.io/form-library" rel="noopener noreferrer"&gt;&lt;strong&gt;SurveyJS Form Library&lt;/strong&gt;&lt;/a&gt; - Enables you to configure and run forms and surveys on your website. (Free, open-source, under the MIT license).&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://surveyjs.io/survey-creator" rel="noopener noreferrer"&gt;&lt;strong&gt;SurveyJS Creator&lt;/strong&gt;&lt;/a&gt; - An embeddable no-code form/survey builder with WYSIWYG UI. (Free-to-use here, but requires a paid developer license for commercial use).&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://surveyjs.io/dashboard" rel="noopener noreferrer"&gt;&lt;strong&gt;SurveyJS Dashboard&lt;/strong&gt;&lt;/a&gt; - Visualizes survey results as charts/tables in a dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://surveyjs.io/pdf-generator" rel="noopener noreferrer"&gt;&lt;strong&gt;SurveyJS PDF Generator&lt;/strong&gt;&lt;/a&gt; - Exports survey responses as PDF files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Being a client-side component, &lt;a href="https://surveyjs.io/form-library/documentation/overview" rel="noopener noreferrer"&gt;SurveyJS Form Library&lt;/a&gt; supports native integration with &lt;a href="https://surveyjs.io/form-library/documentation/get-started-react" rel="noopener noreferrer"&gt;React&lt;/a&gt;, &lt;a href="https://surveyjs.io/form-library/documentation/get-started-angular" rel="noopener noreferrer"&gt;Angular&lt;/a&gt;, &lt;a href="https://surveyjs.io/form-library/documentation/get-started-vue" rel="noopener noreferrer"&gt;Vue.js&lt;/a&gt;, &lt;a href="https://surveyjs.io/form-library/documentation/get-started-knockout" rel="noopener noreferrer"&gt;Knockout&lt;/a&gt;, and for those, who prefer to use &lt;a href="https://surveyjs.io/form-library/documentation/get-started-jquery" rel="noopener noreferrer"&gt;jQuery&lt;/a&gt; or any other JavaScript framework, it offers a special package that utilizes Knockout to render form widgets.&lt;br&gt;
Once you've created a test app for your preferred frontend technology, you are ready to get started with SurveyJS.&lt;/p&gt;
&lt;h3&gt;
  
  
  Install and configure SurveyJS Form Library
&lt;/h3&gt;

&lt;p&gt;As an example, we are going to add the library to a sample React app. But you can find a &lt;a href="https://surveyjs.io/form-library/documentation/get-started" rel="noopener noreferrer"&gt;dedicated step-by-step guide on how to get started with SurveyJS&lt;/a&gt; for other JavaScript frameworks in the Documentation section.&lt;/p&gt;

&lt;p&gt;1.1 Install the &lt;a href="https://www.npmjs.com/package/survey-react-ui" rel="noopener noreferrer"&gt;survey-react-ui&lt;/a&gt; npm package using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install survey-react-ui - save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;1.2 Configure the style of your form by referencing either of the two built-in themes (CSS files):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Default V2 theme
import 'survey-core/defaultV2.min.css';
// Modern theme
// import 'survey-core/modern.min.css';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create a form model in JSON
&lt;/h3&gt;

&lt;p&gt;1.3 Now, we are ready to create a model of our test, which will describe its layout and contents. The simplest way to create a &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model" rel="noopener noreferrer"&gt;form model&lt;/a&gt; is to use a JSON-based schema. This schema contains different sections and parts of our form. Here is what such a schema looks like for a sample 2-page geography test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  title: "Geography test",
  description:
    "Test how well you know geography with this multiple-choice challenge and learn about the continents, countries, oceans and vast bodies of water that are part of planet Earth.",
  logo:
    "https://api.surveyjs.io/private/Surveys/files?name=7c80d870-2ce5-450a-8013-b40725991e89",
  logoPosition: "right",
  firstPageIsStarted: true,
  completedHtml:
    "&amp;lt;h4&amp;gt;You got &amp;lt;b&amp;gt;{correctAnswers}&amp;lt;/b&amp;gt; out of &amp;lt;b&amp;gt;{questionCount}&amp;lt;/b&amp;gt; correct answers.&amp;lt;/h4&amp;gt;",
  completedHtmlOnCondition: [
    {
      expression: "{correctAnswers} == 0",
      html:
        "&amp;lt;h4&amp;gt;Unfortunately, none of your answers are correct. Please try again.&amp;lt;/h4&amp;gt;"
    }
  ],
  pages: [
    {
      name: "startPage"
    },
    {
      name: "page1",
      elements: [
        {
          type: "radiogroup",
          name: "count_continents",
          title: "How many continents are there?",
          correctAnswer: "7",
          choices: ["4", "6", "5", "7"],
          colCount: 2
        },
        {
          type: "dropdown",
          name: "largest_continent",
          title: "What is the largest continent by land area?",
          correctAnswer: "Asia",
          choices: ["Antarctica", "Europe", "Asia", "Africa"]
        }
      ]
    },
    {
      name: "page2",
      elements: [
        {
          type: "radiogroup",
          name: "count_oceans",
          title: "How many oceans are there?",
          correctAnswer: "5",
          choices: ["3", "5", "4", "6"],
          colCount: 2
        }
      ]
    }
  ],
  maxTimeToFinish: 90,
  maxTimeToFinishPage: 30,
  showTimerPanel: "top"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here’s a brief explanation of every property of the model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#title" rel="noopener noreferrer"&gt;&lt;strong&gt;title&lt;/strong&gt;&lt;/a&gt;: Displays the form’s title.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#description" rel="noopener noreferrer"&gt;&lt;strong&gt;description&lt;/strong&gt;&lt;/a&gt;: Explanatory text displayed under the title.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#logo" rel="noopener noreferrer"&gt;&lt;strong&gt;logo&lt;/strong&gt;&lt;/a&gt;: Gets or sets a survey logo.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#logoPosition" rel="noopener noreferrer"&gt;&lt;strong&gt;logoPosition&lt;/strong&gt;&lt;/a&gt;: Gets or sets a survey logo position.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#pages" rel="noopener noreferrer"&gt;&lt;strong&gt;pages&lt;/strong&gt;&lt;/a&gt;: Describes all the pages of the form. Here we have two different pages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you can see, there are two question types: a &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/radio-button-question-model" rel="noopener noreferrer"&gt;radio button group&lt;/a&gt; and a &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/dropdown-menu-model" rel="noopener noreferrer"&gt;single selection drop-down menu&lt;/a&gt;. However, all other available &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/question#getType" rel="noopener noreferrer"&gt;question types&lt;/a&gt; can also be used to create a test. Please refer to the &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/page-model" rel="noopener noreferrer"&gt;Page model&lt;/a&gt; and &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/question" rel="noopener noreferrer"&gt;Question model&lt;/a&gt; API references to learn more about methods, properties, and events used in those classes. To turn a form into a test, the &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/question#correctAnswer" rel="noopener noreferrer"&gt;correctAnswer&lt;/a&gt; property has been specified for each question of the form.&lt;/p&gt;

&lt;h3&gt;
  
  
  Add time limits for self-pacing
&lt;/h3&gt;

&lt;p&gt;Our sample test is also timed: the &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#maxTimeToFinish" rel="noopener noreferrer"&gt;maxTimeToFinish&lt;/a&gt; property limits the time a student is allowed to spend to finish the entire test, and the &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#maxTimeToFinishPage" rel="noopener noreferrer"&gt;maxTimeToFinishPage&lt;/a&gt; property limits the time allowed to answer all questions of a page. SurveyJS Form Library ships with other timing features, including test pausing and resuming that you can learn about in the &lt;a href="https://surveyjs.io/form-library/documentation/design-survey/create-a-quiz#specify-time-limits" rel="noopener noreferrer"&gt;Specify Time Limits&lt;/a&gt; guide.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create personalized feedback pages
&lt;/h3&gt;

&lt;p&gt;To make sure each test taker receives personalized feedback upon test completion, we used the &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#completedHtmlOnCondition" rel="noopener noreferrer"&gt;completedHtmlOnCondition&lt;/a&gt; property. Let’s take a closer look at how it works and what other options to &lt;a href="https://surveyjs.io/form-library/documentation/design-survey/create-a-multi-page-survey#complete-page" rel="noopener noreferrer"&gt;configure the feedback page&lt;/a&gt; are. By default, a SurveyJS form displays a basic ‘Thank you’ message at the end. If you want to customize the contents of this message, simply populate the &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#completedHtml" rel="noopener noreferrer"&gt;completedHtml property&lt;/a&gt; with custom HTML markup. And if you deal with a test and you want to make sure each of your respondents sees an exact number of correct or incorrect answers, the markup should include one or some of the following placeholders:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;{correctAnswers}&lt;/code&gt; — The number of correct answers.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;{incorrectAnswers}&lt;/code&gt; — The number of incorrect answers.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;{questionCount}&lt;/code&gt; — The number of questions.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const surveyJson = {
    completedHtml: "&amp;lt;h4&amp;gt;You got &amp;lt;b&amp;gt;{correctAnswers}&amp;lt;/b&amp;gt; out of &amp;lt;b&amp;gt;{questionCount}&amp;lt;/b&amp;gt; correct answers.&amp;lt;/h4&amp;gt;",
...
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want to go further and provide custom feedback &lt;em&gt;based&lt;/em&gt; on the number of correct/incorrect answers, populate the &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model#completedHtmlOnCondition" rel="noopener noreferrer"&gt;completedHtmlOnCondition&lt;/a&gt; array with a series of objects consisting of a Boolean expression (make sure to use the placeholders mentioned earlier) and HTML markup. Once an expression evaluates to true, a test taker sees the text from the related object in the ‘Thank you’ message.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const surveyJson = {
    completedHtmlOnCondition: [{
        expression: "{correctAnswers} == 0",
        html: "&amp;lt;h4&amp;gt;Unfortunately, none of your answers are correct. Please try again.&amp;lt;/h4&amp;gt;"
    }, {
        expression: "{correctAnswers} == {questionCount}",
        html: "&amp;lt;h4&amp;gt;Congratulations! You answered all the questions correctly!&amp;lt;/h4&amp;gt;"
    }]
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create a Survey Model and Render a Survey
&lt;/h3&gt;

&lt;p&gt;1.4 Now, when the data schema is configured, you want to instantiate a model by passing the model schema to the Model constructor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import 'survey-core/defaultV2.min.css';
import { Model } from 'survey-core';

const surveyJson = {
  //...
}

function App() {
   const survey = new Model(surveyJson);
   return …;
}
export default App;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;1.5 To render a survey, import the Survey component, add it to the template, and pass the model instance you created in the previous step to the component’s model attribute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import 'survey-core/defaultV2.min.css';
import { Model } from 'survey-core';
import { Survey } from 'survey-react-ui';


const surveyJson = {
   //...
};


function App() {
  const survey = new Model(surveyJson);

  return &amp;lt;Survey model={survey} /&amp;gt;;
}


export default App;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will also need to configure the storage of your test result. Please follow the &lt;a href="https://surveyjs.io/form-library/documentation/get-started-react#handle-survey-completion" rel="noopener noreferrer"&gt;Handle Survey Completion&lt;/a&gt; guide to get the instructions.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Basic Geography Test Demo
&lt;/h3&gt;

&lt;p&gt;Run the demo below to take the test and challenge your knowledge!&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/reverent-wilbur-shpc5x"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;That’s all for now.&lt;/p&gt;

&lt;p&gt;In the second part of the article, we will show you how to add scoring to an assessment form.&lt;/p&gt;

</description>
      <category>devto</category>
      <category>posts</category>
      <category>writing</category>
      <category>discuss</category>
    </item>
    <item>
      <title>How to Automate Customer Feedback Collection</title>
      <dc:creator>SurveyJS</dc:creator>
      <pubDate>Mon, 20 Feb 2023 07:21:41 +0000</pubDate>
      <link>https://forem.com/_surveyjs/how-to-automate-customer-feedback-collection-4e56</link>
      <guid>https://forem.com/_surveyjs/how-to-automate-customer-feedback-collection-4e56</guid>
      <description>&lt;p&gt;A comprehensive guide on how to configure a dynamic product feedback form for your JavaScript application using SurveyJS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvtaedlyyae1kah6lzge9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvtaedlyyae1kah6lzge9.jpg" alt="Product Feedback Survey - SurveyJS" width="800" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why bother with customer feedback?
&lt;/h2&gt;

&lt;p&gt;Collection of customer feedback on products or services you market is a critical and integral part of the product development cycle and is essential for business growth.&lt;/p&gt;

&lt;p&gt;Understanding how customers feel about a product, a service, or a brand in general can help find opportunities for innovation, or simply detect customer service deficiency.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Offline to Online
&lt;/h2&gt;

&lt;p&gt;Widely spread customer feedback kiosks and devices do a great job in measuring overall feedback, but they have lots of limitations that we won’t be covering in this article. Due to the shift from brick-and-mortar to online shops and the rise of new technologies, a great deal of products and services are sold from a distance, where a seller and a buyer have never met in person. So, the only way to make sure a customer has a positive experience is to ask for some feedback online using the same website they used to place an order in the first place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ask for More Than an Emoji Can Tell
&lt;/h2&gt;

&lt;p&gt;To get a comprehensive understanding of how customers evaluate their experience of interacting with your products or services, and receive actionable insights, an emoji feedback widget is simply not enough. So, it’s important to create a &lt;a href="https://surveyjs.io/form-library/examples/product-feedback-survey-template/reactjs" rel="noopener noreferrer"&gt;complex multi-step Product Feedback Survey&lt;/a&gt; that does not only provide you with answers, but enables you to analyze them afterwards.&lt;/p&gt;

&lt;p&gt;To achieve this, you would need to use &lt;em&gt;a variety of question types&lt;/em&gt; to collect both &lt;em&gt;quantitative&lt;/em&gt; and &lt;em&gt;qualitative&lt;/em&gt; data from your customers. You might also need to ask some of your respondents a follow-up question, hide one or more questions from others, or even implement several different survey flows that vary subsequent questions based on certain answers. Such a survey form needs to be tailored to &lt;em&gt;match a specific design&lt;/em&gt; of your website or portal. Finally, you don’t want to spend hours designing it and weeks to have it updated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is Convention Not the Option?
&lt;/h2&gt;

&lt;p&gt;While online survey services can provide a simple and relatively low-cost (at least, in the short run) solution to form creation and embedding, they come with limitations in terms of customization and data ownership. Since the survey data is stored on third-party servers, concerns about data privacy and security are never off the table. Moreover, such online survey services might not be able to offer full adaptation due to internal constraints.&lt;/p&gt;

&lt;p&gt;If you use the traditional approach to building surveys, which involves using HTML/JavaScript with custom validation logic, HTTP requests, and a database, even a minor change such as adding a new question would require you to make separate modifications to the server, database, and frontend code, and would take days unless you have a proper CI/CD pipeline in place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Choose SurveyJS Form Library for Web Forms?
&lt;/h2&gt;

&lt;p&gt;SurveyJS is a fast, versatile, free, and open-source (MIT license) &lt;a href="https://surveyjs.io/form-library" rel="noopener noreferrer"&gt;JavaScript client-side library&lt;/a&gt; for &lt;a href="https://surveyjs.io/form-library/documentation/get-started-react" rel="noopener noreferrer"&gt;React&lt;/a&gt;, &lt;a href="https://surveyjs.io/form-library/documentation/get-started-angular" rel="noopener noreferrer"&gt;Angular&lt;/a&gt;, &lt;a href="https://surveyjs.io/form-library/documentation/get-started-vue" rel="noopener noreferrer"&gt;Vue.js&lt;/a&gt;, &lt;a href="https://surveyjs.io/form-library/documentation/get-started-knockout" rel="noopener noreferrer"&gt;Knockout&lt;/a&gt;, and &lt;a href="https://surveyjs.io/form-library/documentation/get-started-jquery" rel="noopener noreferrer"&gt;jQuery&lt;/a&gt; that can be used to build forms and surveys of any complexity. It has a data-driven approach — fully dynamic surveys defined as JSON schemas, with templating for UI elements. Since all survey data is in industry-standard JSON format, the frontend and the backend are separated, so you can use &lt;a href="https://surveyjs.io/documentation/backend-integration" rel="noopener noreferrer"&gt;any server + database combination&lt;/a&gt; with it.&lt;/p&gt;

&lt;p&gt;SurveyJS offers a very straightforward approach to survey design and customization — you can select from a variety of built-in themes and &lt;a href="https://surveyjs.io/form-library/examples/create-custom-ui-theme/reactjs" rel="noopener noreferrer"&gt;personalize them with custom CSS code&lt;/a&gt;. It also supports &lt;a href="https://surveyjs.io/form-library/examples/survey-localization/reactjs" rel="noopener noreferrer"&gt;automatic survey localization&lt;/a&gt; and the integration of third-party JavaScript components, such as &lt;a href="https://surveyjs.io/form-library/examples/custom-widget-bootstrapslider/reactjs" rel="noopener noreferrer"&gt;Bootstrap Slider&lt;/a&gt; or &lt;a href="https://surveyjs.io/form-library/examples/custom-widget-nouislider/reactjs" rel="noopener noreferrer"&gt;noUiSlider&lt;/a&gt;, and many others.&lt;/p&gt;

&lt;p&gt;With SurveyJS you can improve implementation speed, make maintenance easier, and any changes made to a survey take mere seconds to reflect in the frontend. &lt;strong&gt;Since it’s self-hosted&lt;/strong&gt;, it lets you &lt;strong&gt;retain full ownership of respondents’ data&lt;/strong&gt;, without giving up privacy or being locked into an online survey service you can’t control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions to Ask in a Product Feedback Survey
&lt;/h2&gt;

&lt;p&gt;Before we jump into the ocean of possible questions you can use in your Product Feedback Survey, it’s important to plan an analysis strategy beforehand, so you don’t find yourself in another ocean — of disorganized and unmeasurable answers.&lt;/p&gt;

&lt;p&gt;There are two major data types that can be gathered with a feedback survey — qualitative and quantitative.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Quantitative data&lt;/strong&gt;&lt;/em&gt; refers to numerical data. It’s always collected using close-ended questions, and requires a specific answer (such as “yes” or “no”), a selection from a limited set of options, or a single value that could later be assigned to a predefined value range group.&lt;/p&gt;

&lt;p&gt;Here are a few questions that you can use to collect quantitative data:&lt;/p&gt;

&lt;h3&gt;
  
  
  How did you first hear about us? (Search engine (Google, Bing, etc.), online newsletter, blog post, word of mouth, social media)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://surveyjs.io/form-library/examples/single-select-radio-button-group/reactjs" rel="noopener noreferrer"&gt;A radio button group&lt;/a&gt; is a perfect question type choice here, since it allows respondents to select only a single option. Received results can be grouped by answer and visualized using a classical &lt;a href="https://surveyjs.io/dashboard/examples/interactive-survey-data-dashboard/reactjs" rel="noopener noreferrer"&gt;pie or bar chart&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F65nztq1i9z3q1q9l1bk7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F65nztq1i9z3q1q9l1bk7.png" alt="A radio button group question  - SurveyJS" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  To what extent do you agree with the following statements? (Strongly disagree, Disagree, Undecided, Agree, Strongly agree)
&lt;/h3&gt;

&lt;p&gt;This type of question is best implemented with a &lt;a href="https://surveyjs.io/form-library/examples/single-selection-matrix-table-question/reactjs" rel="noopener noreferrer"&gt;Single Selection Matrix Table&lt;/a&gt;. One of its main advantages is the ability to group several rows of questions that can be answered with the same set of options specified in columns. Then answers to each question from a group can be analyzed separately using charts with percentage values representing these options.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxv5xx74l9axya8r43jh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxv5xx74l9axya8r43jh.png" alt="A single selection matrix table - SurveyJS" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  On a scale of 1–5, how would you rate your buying experience?
&lt;/h3&gt;

&lt;p&gt;This is a &lt;a href="https://surveyjs.io/form-library/examples/questiontype-rating/reactjs" rel="noopener noreferrer"&gt;Rating question&lt;/a&gt; type that asks respondents to rate or evaluate a particular aspect of a product, service, or in our case — buying experience, on a numerical or descriptive scale and choose a number or label that best reflects their opinion.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhlgocgycsby4als0bsp3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhlgocgycsby4als0bsp3.png" alt="A rating question - SurveyJS" width="800" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Have you used similar products before?
&lt;/h3&gt;

&lt;p&gt;This is a simple &lt;a href="https://surveyjs.io/form-library/examples/yes-no-question/reactjs" rel="noopener noreferrer"&gt;“Yes/No” question&lt;/a&gt;, also known as a Boolean question. And we could use it as is, but it would leave us with no information on competitors that our dear customers also use. So, in order to get more details, we want to configure a conditional rule that triggers a follow-up question asking to specify competitors if a respondent replies with “Yes”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbu46liq1eq65kxn84163.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbu46liq1eq65kxn84163.png" alt="A " width="800" height="138"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is an extract from the JSON file that shows a &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/question#visibleIf" rel="noopener noreferrer"&gt;visibleIf property&lt;/a&gt; with an expression: &lt;code&gt;{have-used-similar-products} = true&lt;/code&gt;. The expression returns &lt;code&gt;true&lt;/code&gt; if the answer to the “have-used-similar-products” question is “Yes”. This triggers a follow-up question named “similar-products”.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;You can configure this rule by manually writing it in JSON, or use a &lt;a href="https://surveyjs.io/create-free-survey" rel="noopener noreferrer"&gt;free survey tool&lt;/a&gt; that auto-generates survey definitions in JSON format for you as you drag and drop questions and apply various configurations including skip logic rules in a no-code UI. Such a survey definition is called a &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model" rel="noopener noreferrer"&gt;Survey Model&lt;/a&gt;, or a schema.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmou0j37mmthckf8tiasw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmou0j37mmthckf8tiasw.png" alt="How to configure conditional logic and branching in survey forms - SurveyJS" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let’s take a quick look at what question types are available to collect &lt;em&gt;&lt;strong&gt;qualitative data&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Qualitative data&lt;/strong&gt;&lt;/em&gt;, as opposed to numerical and more structured quantitative data, is descriptive data that provides a more in-depth understanding of the customer experience with the product and can give valuable insights into customer needs, expectations, and behavior. Since it requires open-ended questions, it gives a respondent enough space to speak out and share information that might be missed with pre-defined choice options.&lt;/p&gt;

&lt;p&gt;Here are a few question types that you can use to collect this type of data:&lt;/p&gt;

&lt;h3&gt;
  
  
  What’s the main reason for your score?
&lt;/h3&gt;

&lt;p&gt;This is a follow-up to the buying experience question we discussed earlier. Since there could be various reasons why a customer selected one of the low score values, instead of listing all possible reasons that led to a poor buying experience, it’s better to just let a customer describe it using their own words. A &lt;a href="https://surveyjs.io/form-library/examples/questiontype-comment/reactjs" rel="noopener noreferrer"&gt;Text Area&lt;/a&gt; would be the best option: it allows users to fit enough information to give you an understanding of a particular situation, while limiting the number of characters that can be entered to prevent overwhelming you with pages of text.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsr04ekgmfc0v2ccpocsv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsr04ekgmfc0v2ccpocsv.png" alt="A rating question with a text area for details - SurveyJS" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What’s the ONE thing our product is missing?
&lt;/h3&gt;

&lt;p&gt;This question requires a simple &lt;a href="https://surveyjs.io/form-library/examples/text-entry-question/reactjs" rel="noopener noreferrer"&gt;Text Entry field&lt;/a&gt; since you only need it to fit one phrase or a sentence.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzl5tlxr1jqfn79ccofa5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzl5tlxr1jqfn79ccofa5.png" alt="A text entry field - SurveyJS" width="800" height="136"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Both quantitative and qualitative data are important in a Product Feedback Survey because they provide different types of information. As you can see from the examples we covered, they are most effective when used together. You can gather numerical information and use it to compare the product with others, track trends over time, and measure customer satisfaction. And when you need to get more details or simply want to learn how customers solve a certain issue and you don't have any data to transform it to quantitative questions - just let respondents speak for themselves!&lt;/p&gt;

&lt;h2&gt;
  
  
  SurveyJS in Action
&lt;/h2&gt;

&lt;p&gt;To demonstrate how easy it is to configure a multi-step survey, here's a ready-to-use &lt;a href="https://surveyjs.io/form-library/examples/product-feedback-survey-template/reactjs" rel="noopener noreferrer"&gt;Product Feedback Survey&lt;/a&gt; made with SurveyJS.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/angry-banzai-l6b7yq?view=preview"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to start?
&lt;/h2&gt;

&lt;p&gt;Once you have decided on the type of data you want to obtain from customers, selected appropriate question types, and thought through your survey flow, you are ready to &lt;a href="https://surveyjs.io/create-free-survey" rel="noopener noreferrer"&gt;generate a survey JSON schema&lt;/a&gt;. You then need to install and configure (using that JSON file) a framework-specific npm package by following one of the &lt;a href="https://surveyjs.io/form-library/documentation/get-started" rel="noopener noreferrer"&gt;dedicated getting started guides&lt;/a&gt; available for each frontend technology, and implement the backend. To help you get a backend up and running quickly, SurveyJS has created &lt;a href="https://surveyjs.io/backend-integration/examples" rel="noopener noreferrer"&gt;demo examples for ASP.NET Core, NodeJS, PHP, and WordPress&lt;/a&gt; that you can use for free.&lt;br&gt;
If you want to know more about the architecture of all SurveyJS libraries, please refer to the &lt;a href="https://surveyjs.io/documentation/surveyjs-architecture" rel="noopener noreferrer"&gt;SurveyJS Architecture&lt;/a&gt; guide.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Customer feedback collection will always be an integral part of business growth as it lets you gain valuable and actionable insights. By introducing SurveyJS to your form workflow, you can make this process not only easy and enjoyable, but secure - as it lets you stay in control of all sensitive respondent data you receive.&lt;br&gt;
Happy surveying!&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
    <item>
      <title>How to Create an Effective Survey, Poll, or Quiz, and Increase its Completion Rate</title>
      <dc:creator>SurveyJS</dc:creator>
      <pubDate>Thu, 09 Feb 2023 15:00:04 +0000</pubDate>
      <link>https://forem.com/_surveyjs/how-to-create-an-effective-survey-poll-or-quiz-and-increase-its-completion-rate-386o</link>
      <guid>https://forem.com/_surveyjs/how-to-create-an-effective-survey-poll-or-quiz-and-increase-its-completion-rate-386o</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkoiy9e7v3fqukodk971u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkoiy9e7v3fqukodk971u.png" alt="SurveyJS Form Library" width="800" height="530"&gt;&lt;/a&gt;&lt;br&gt;
Creating effective, engaging, and impactful surveys, polls, and other web forms is a crucial step in the data collection and analysis process. A well-designed survey with simple and clear questions that flow will help businesses and organizations get more responses, thus allowing them to better understand the needs of their customers, employees, and stakeholders, and make informed decisions based on accurate and reliable data.&lt;/p&gt;

&lt;p&gt;However, developing such forms requires consideration of several factors, such as choosing the right question type depending on the data you want to acquire from respondents, the format of the form, and its target audience. If you want to understand why the new Nike model of sneakers is not in demand, you need to use the language of your target audience, which is teens, to help you better understand the reasons behind the poor sales figures. Boring, unclear, and overly complex forms are often either not completed at all or left unfinished, forcing survey creators to look for new respondents to ensure the objectivity of the results obtained.&lt;/p&gt;

&lt;p&gt;In this article, we will discuss popular question types, how they differ, and how to choose the right question type based on the data you want to obtain from your target audience. We will also cover common mistakes to avoid when creating a form to increase its completion rate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose the Right Question Types
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://surveyjs.io/create-free-survey" rel="noopener noreferrer"&gt;SurveyJS&lt;/a&gt; offers a vast variety of different types of input fields for its users. &lt;br&gt;
You've got basic single and multi-line input fields, check boxes, drop-down lists, Booleans and radio groups, matrix questionnaires, Likert scales, file uploads, HTML embeds, and more. Every field supports input validation (both static and async), and expression evaluation (for example, assessing a respondent's age from their DOB input).&lt;/p&gt;

&lt;p&gt;The right question type depends on the data you want to collect and the type of information you are looking to gain.&lt;/p&gt;

&lt;p&gt;Let's focus on the most common question types.&lt;/p&gt;

&lt;h3&gt;
  
  
  Single- and Multiple-Choice Questions
&lt;/h3&gt;

&lt;p&gt;This type of question allows respondents to select one or more answers from a list of options. They are useful for collecting data about preferences, opinions, or demographic information. A &lt;a href="https://surveyjs.io/form-library/examples/single-select-radio-button-group/reactjs" rel="noopener noreferrer"&gt;Radio button group&lt;/a&gt;, &lt;a href="https://surveyjs.io/form-library/examples/create-dropdown-menu-in-javascript/reactjs" rel="noopener noreferrer"&gt;Dropdown boxes&lt;/a&gt; and &lt;a href="https://surveyjs.io/form-library/examples/create-checkboxes-question-in-javascript/reactjs" rel="noopener noreferrer"&gt;Check boxes&lt;/a&gt; are the most popular questions in this category. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feouuohxplgunv1nlwnx6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feouuohxplgunv1nlwnx6.png" alt="SurveyJS - Radio Button Group" width="800" height="390"&gt;&lt;/a&gt;&lt;br&gt;
SurveyJS ships its dropdown menu with server-side filtering, &lt;a href="https://surveyjs.io/form-library/examples/lazy-loading-dropdown/reactjs" rel="noopener noreferrer"&gt;lazy loading&lt;/a&gt; and a search-as-your-type feature out-of-the-box. It also allows you to hide selection options that have already been selected by a respondent to make the search even more convenient. And if you have a long list of choices to choose from, such as a list of countries, &lt;a href="https://surveyjs.io/form-library/examples/dropdown-menu-load-data-from-restful-service/reactjs" rel="noopener noreferrer"&gt;populate your dropdown menus&lt;/a&gt; with data loaded from a REST API web service. A &lt;a href="https://surveyjs.io/form-library/examples/how-to-create-multiselect-tag-box/reactjs" rel="noopener noreferrer"&gt;Tag Box version&lt;/a&gt; of a Dropdown list is also available. It displays selected items in the input field as removable tags.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rating Scale Questions
&lt;/h3&gt;

&lt;p&gt;A &lt;a href="https://surveyjs.io/form-library/examples/questiontype-rating/reactjs" rel="noopener noreferrer"&gt;Rating Scale question&lt;/a&gt; asks respondents to rate their agreement or satisfaction with a particular statement using a common 5-point or 10-point scale. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3g0od5wg1vjysfzopyl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3g0od5wg1vjysfzopyl.png" alt="SurveyJS - Rating Scale" width="800" height="172"&gt;&lt;/a&gt;&lt;br&gt;
They are useful for collecting data about opinions and perceptions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ranking Order Questions
&lt;/h3&gt;

&lt;p&gt;A &lt;a href="https://surveyjs.io/form-library/examples/questiontype-ranking/reactjs" rel="noopener noreferrer"&gt;Ranking Order Question&lt;/a&gt; allows your respondents to prioritize a list of choices in the order of preference, priority, importance, or some other factor. They are useful for collecting data about priorities and preferences.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwpt4wdhilma9kfxem84x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwpt4wdhilma9kfxem84x.png" alt="SurveyJS - Ranking Order Questions" width="800" height="433"&gt;&lt;/a&gt;&lt;br&gt;
Unlike the abovementioned types of questions, Ranking Questions require users to evaluate their preference towards all options available, not only one or two.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open-Ended Questions
&lt;/h3&gt;

&lt;p&gt;This type of question allows respondents to provide written answers to a question. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Felgo0rkraold2wfbhbg7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Felgo0rkraold2wfbhbg7.png" alt="SurveyJS - Text Box" width="800" height="160"&gt;&lt;/a&gt;&lt;br&gt;
They are useful for gaining qualitative data on a subject or simply for collecting personal information, such as name, phone number, address, etc. &lt;/p&gt;

&lt;p&gt;SurveyJS offers several options for open-ended questions to choose from: for short answers, there is a &lt;a href="https://surveyjs.io/form-library/examples/text-entry-question/reactjs" rel="noopener noreferrer"&gt;Text Entry Field&lt;/a&gt;. If you want a respondent to share an opinion, you can add a &lt;a href="https://surveyjs.io/form-library/examples/questiontype-comment/reactjs" rel="noopener noreferrer"&gt;Comment Field&lt;/a&gt; to your form. If you need a group of related open-ended questions such as legal full name with short answers that require multiple text input fields - &lt;a href="https://surveyjs.io/form-library/examples/multiple-text-box-question/reactjs" rel="noopener noreferrer"&gt;Multiple Textboxes&lt;/a&gt; is the way to go.&lt;/p&gt;

&lt;h3&gt;
  
  
  Likert Scale Questions
&lt;/h3&gt;

&lt;p&gt;This type of question asks respondents react to a particular statement on a 5 to 7-point scale, such as "strongly agree" to "strongly disagree". &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5m3gba53mupw5tn6mecf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5m3gba53mupw5tn6mecf.png" alt="SurveyJS - Likert Scale" width="800" height="432"&gt;&lt;/a&gt;&lt;br&gt;
They are useful for collecting data about attitudes and beliefs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Matrix Questions
&lt;/h3&gt;

&lt;p&gt;This type of question asks respondents to answer several closed-ended questions with the same choice options, or rate multiple items or statements on the same scale. They are useful for collecting data about multiple aspects of a particular issue or topic. &lt;/p&gt;

&lt;p&gt;SurveyJS offers both &lt;a href="https://surveyjs.io/form-library/examples/single-selection-matrix-table-question/reactjs" rel="noopener noreferrer"&gt;Single Selection&lt;/a&gt; and &lt;a href="https://surveyjs.io/form-library/examples/questiontype-matrixdropdown/reactjs" rel="noopener noreferrer"&gt;Multi Selection&lt;/a&gt; Matrix Table types, allowing you to choose the one that suits you best. If you deal with complex forms, such as a medical history form, or job application form that might require adding a duplicate option as a row of your Matrix Table - we've got you covered! Select &lt;a href="https://surveyjs.io/form-library/examples/questiontype-matrixdynamic/reactjs" rel="noopener noreferrer"&gt;Dynamic Matrix Table&lt;/a&gt; and let users add or remove duplicate rows whenever they need. You can also change the cell types of your Matrix Table from a simple Text Entry Field to a Dropdown menu, Check boxes, Radio Button Group, Comment, Yes/No - you name it.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1d44ow8f9k4yit86e8h3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1d44ow8f9k4yit86e8h3.png" alt="SurveyJS - Multi-Selection Matrix Table" width="800" height="255"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Design Engaging and Effective Surveys
&lt;/h2&gt;

&lt;p&gt;Besides choosing the right question types, and the right words relevant to the target audience, you might want to consider other factors that can make your surveys more engaging and effective and increase their completion rate. Below are some of them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Clear and Concise Questions
&lt;/h3&gt;

&lt;p&gt;It is essential to ask clear and concise questions that are easy for respondents to understand. This will help to ensure that the data you collect is accurate and valuable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Personalize the Survey
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://surveyjs.io/form-library/examples/auto-populate-form-fields/reactjs" rel="noopener noreferrer"&gt;Auto-Populate form fields&lt;/a&gt; and address respondents by their names to add a personal touch to the survey.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keep it Anonymous
&lt;/h3&gt;

&lt;p&gt;Anonymous surveys encourage people to be more open and honest in their responses.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keep it Short
&lt;/h3&gt;

&lt;p&gt;Avoid asking too many questions in your survey, as this can lead to frustration, loss of interest in taking the survey, and low completion rates as a result. Try to keep your survey as short as possible while still collecting the data you need.&lt;/p&gt;

&lt;h3&gt;
  
  
  Make it Visual
&lt;/h3&gt;

&lt;p&gt;Consider using &lt;a href="https://surveyjs.io/form-library/examples/questiontype-image/reactjs" rel="noopener noreferrer"&gt;images, videos&lt;/a&gt;, and &lt;a href="https://surveyjs.io/form-library/examples/questiontype-html/reactjs" rel="noopener noreferrer"&gt;HTML&lt;/a&gt; to entertain respondents and make your survey more appealing and engaging.&lt;/p&gt;

&lt;h3&gt;
  
  
  Provide Incentives
&lt;/h3&gt;

&lt;p&gt;Consider offering some swag, discounts, or prizes to encourage respondents to complete your survey.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;We hope this information is of value as you researching ways to collect customer feedback and boost your business. As always, you're welcome to share your thoughts in the comment section below.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Remember: Asking is a powerful tool, one just needs to learn how to use it right.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cli</category>
      <category>showdev</category>
      <category>gamechallenge</category>
    </item>
    <item>
      <title>Create a Multi-Page Form and Run it in an Angular app in Minutes with SurveyJS</title>
      <dc:creator>SurveyJS</dc:creator>
      <pubDate>Wed, 18 Jan 2023 09:33:36 +0000</pubDate>
      <link>https://forem.com/_surveyjs/create-a-multi-page-form-and-run-it-in-an-angular-app-in-minutes-with-surveyjs-254l</link>
      <guid>https://forem.com/_surveyjs/create-a-multi-page-form-and-run-it-in-an-angular-app-in-minutes-with-surveyjs-254l</guid>
      <description>&lt;p&gt;Whether you come from the healthcare or education sector, human resources, or anything in between - collecting sensitive data can become a maintenance nightmare, since you, as a form creator, must guarantee anonymity and privacy to your respondents (very often - to thousands of them) in order to remain legally compliant and ensure honest answers.&lt;/p&gt;

&lt;p&gt;The software you use to create and host forms needs to be more than just a third-party, black-box SaaS platform where you’re locked into too many dependencies, and locked out of engagement, monitoring, and improvement of the actual service because of intellectual property laws.&lt;/p&gt;

&lt;p&gt;Regardless of the type of form workflow you deal with - internal or external, it’s often the case that form contents require systematic and sometimes rapid changes, which as a consequence forces your software developers to constantly be involved in the creation and further modification of those forms.&lt;/p&gt;

&lt;p&gt;So to solve the form automation issue, you want a &lt;strong&gt;no-code&lt;/strong&gt; instrument for content creators that &lt;strong&gt;performs well even with hundreds of questions&lt;/strong&gt;. You also want it to be fully customizable, so you can use &lt;a href="https://surveyjs.io/form-library/examples/survey-customcss/reactjs" rel="noopener noreferrer"&gt;custom CSS&lt;/a&gt; to make your surveys and forms look great and stand out with &lt;a href="https://surveyjs.io/form-library/examples/survey-logo/reactjs" rel="noopener noreferrer"&gt;your brand’s own design language&lt;/a&gt;, not the same old default styles provided by third-party vendors. &lt;/p&gt;

&lt;p&gt;You probably also want such a tool to enable you to apply &lt;strong&gt;complex &lt;a href="https://surveyjs.io/form-library/examples/condition-kids/reactjs" rel="noopener noreferrer"&gt;conditional logic&lt;/a&gt; and branching&lt;/strong&gt; to your forms so you don’t ask questions that are not relevant to certain respondents, and stay in control of your form workflow. &lt;br&gt;
And it’s also handy if this form builder &lt;strong&gt;supports &lt;a href="https://surveyjs.io/form-library/examples/survey-localization/reactjs" rel="noopener noreferrer"&gt;auto-localization&lt;/a&gt;&lt;/strong&gt; and switches form contents at runtime from, say, English to another language based on a respondent’s system locale.&lt;/p&gt;

&lt;p&gt;And what would really be cool is if this tool also knew how to &lt;strong&gt;save a form to your organization’s database&lt;/strong&gt; as soon as it’s submitted, or &lt;strong&gt;send you emails or Slack notifications&lt;/strong&gt; whenever a unique respondent takes your survey.&lt;/p&gt;

&lt;p&gt;Quite a lot to ask for, right? We’ve got great news for you all! Such a form builder does exist, and it’s called &lt;a href="https://surveyjs.io/" rel="noopener noreferrer"&gt;SurveyJS&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Self-hosting SurveyJS is the easiest way to do both - ensure individual privacy and legal compliance, and offload content work from software developers. You would &lt;a href="https://surveyjs.io/form-library/documentation/design-survey/create-a-simple-survey" rel="noopener noreferrer"&gt;create simple surveys&lt;/a&gt; or &lt;a href="https://surveyjs.io/form-library/documentation/design-survey/create-a-multi-page-survey" rel="noopener noreferrer"&gt;multi-page surveys&lt;/a&gt;, run them, and &lt;strong&gt;store responses completely within your own infrastructure&lt;/strong&gt;, thus being in total control of the data flow between server and client without any third-party involved.&lt;/p&gt;

&lt;p&gt;It also gives your front-end developers the freedom to not have to be involved in form creation, thanks to an &lt;strong&gt;intuitive drag-and-drop interface&lt;/strong&gt; that content managers can use directly.&lt;/p&gt;

&lt;p&gt;In this article, you’ll learn the basic functionality of the Survey Creator interface. We will also create a job application form together and &lt;a href="https://surveyjs.io/form-library/documentation/get-started-angular" rel="noopener noreferrer"&gt;run it in a test Angular app&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;A quick note for those who haven’t heard of SurveyJS yet: &lt;a href="https://surveyjs.io/survey-creator/documentation/overview" rel="noopener noreferrer"&gt;Survey Creator&lt;/a&gt; is one of the four open-source JS libraries of the SurveyJS project and once it is added to your application, it lets you build a secure and self-hosted form management system to generate multiple forms and run them using another SurveyJS library called &lt;a href="https://surveyjs.io/form-library/documentation/overview" rel="noopener noreferrer"&gt;Form Library&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsrbp98baxa0p7d8o4tum.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsrbp98baxa0p7d8o4tum.png" alt="SurveyJS Libraries" width="800" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We’ll talk about this library a bit later. Now, let’s get started!&lt;/p&gt;

&lt;p&gt;So for this tutorial, I’ll be using a free and &lt;a href="https://surveyjs.io/create-free-survey" rel="noopener noreferrer"&gt;full-scale demo of Survey Creator&lt;/a&gt; that you can easily find at surveyjs.io by clicking the Create a Survey button in the top right corner of the page.&lt;/p&gt;

&lt;p&gt;As you can see, the default UI of Survey Creator is organized in multiple tabs. We’ll mostly be focusing on the Designer tab as this is where forms are configured. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7an16ovxbkfwd1mwoqnn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7an16ovxbkfwd1mwoqnn.png" alt="Survey Creator: Tabbed Interface" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can drag and drop questions and panels from the Toolbox on the left onto the design surface, and then use the Property Grid on the right to change the question, panel, and entire form settings. We’ll also be switching to the Preview during the design process to check how applied changes will look.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjs73b2a93q6h1iw38rv2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjs73b2a93q6h1iw38rv2.png" alt="Survey Creator UI Elements" width="800" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let’s see the final version of our &lt;a href="https://surveyjs.io/published?id=8e1ae568-b306-498b-a9ce-299b23ce49f6" rel="noopener noreferrer"&gt;job application form&lt;/a&gt; including the number of pages the form will have and the fields on each page. The form that we will create during this tutorial is composed of two different pages - Personal Information and Employment Details. The first page includes such fields as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full name&lt;/li&gt;
&lt;li&gt;Date of birth&lt;/li&gt;
&lt;li&gt;Current address&lt;/li&gt;
&lt;li&gt;Contact email&lt;/li&gt;
&lt;li&gt;And a field for resume file upload&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The second page is dedicated to employment details and it covers current employment status, the position an applicant is applying for, expected monthly salary, and available start date.&lt;br&gt;
As you might have noticed, some of the questions from the first page are grouped together inside a frame that is called a &lt;a href="https://surveyjs.io/form-library/examples/questiontype-panel/reactjs" rel="noopener noreferrer"&gt;panel&lt;/a&gt;. A panel is a sort of container for other questions and panels. You can use it if you want to configure or modify several form elements at the same time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fworpyeuhzudrx65z6eyz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fworpyeuhzudrx65z6eyz.png" alt="Panel" width="800" height="608"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A new page is created automatically, once you add an element to it. Let’s drop a panel onto the design surface. Alternatively, you can just click it to add it to your form. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx3cry46sin1pcl0wpsyd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx3cry46sin1pcl0wpsyd.png" alt="Add a Panel to a Form" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let’s assign a name and a title to the form itself,  the first page, and the panel we just added. &lt;em&gt;A quick note here - the name is used for internal purposes like form configuration, while the title is what your respondents will see.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F409s8u7xol8a9u3w5kmc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F409s8u7xol8a9u3w5kmc.png" alt="Edit Name and Title for Form, Page, and Panel" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are two places where you can assign a name to your form and its elements. The first option is to do it on the design surface, by simply clicking the title and typing its name. The other place is the property grid here on the right. First, make sure you are on the right settings level. &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/survey-data-model" rel="noopener noreferrer"&gt;Survey&lt;/a&gt; is always the highest level, and once it’s chosen the property grid displays the settings that are related to the entire form rather than its element. &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/page-model" rel="noopener noreferrer"&gt;Page&lt;/a&gt; or &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/panel-model" rel="noopener noreferrer"&gt;panel&lt;/a&gt;-level settings, on the other hand, allow you to configure the behavior of a particular page, or of a set of elements, inside a panel.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpe1be16yevzyhs9fxxq1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpe1be16yevzyhs9fxxq1.png" alt="Survey Elements" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am also going to add a little description under the form title to thank an applicant for taking the time to fill out the form and a &lt;a href="https://surveyjs.io/form-library/examples/survey-logo/reactjs" rel="noopener noreferrer"&gt;company logo&lt;/a&gt; to make the header of my form look unique and more complete. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiavt4bpas9dowpk3cwaa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiavt4bpas9dowpk3cwaa.png" alt="SurveyJS Form Logo and Description" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let’s insert three &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/text-entry-question-model" rel="noopener noreferrer"&gt;simple text entry fields&lt;/a&gt; into our panel for First name, Surname, and Date of Birth. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F92ngac6l006yv0u5ymdk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F92ngac6l006yv0u5ymdk.png" alt="Text Input fields" width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Because it’s not a survey, I don’t want my questions to have numbers, so I will hide them by selecting survey level settings, and under Question, I select the “Hide question numbers” option from the Question numbering dropdown menu. As you can see, since I’ve made this change at the highest level, it’s applied to all questions inside the form.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fegecb4tqg4e8d3q01q7a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fegecb4tqg4e8d3q01q7a.png" alt="Survey Question Numbering Settings" width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now I want to enhance my questions a bit. I’ll select an input type for each question and place the Surname field on the same line as the First name field. To do this, I need to select the second question, go to the property grid and under Layout, unselect the “Display question on a new line” option. I don’t really need to modify the input type for the first question, so I am going to leave the default text value here. But I want to make those two questions mandatory, to ensure that respondents don’t skip them while filling out the form. For this, I simply need to select the desired question and toggle the “Required” option. I’ll also set the autocomplete type for those questions to Name and Family-name, respectively, so that the user's browser can retrieve this data either from past values entered by the user or from pre-configured values if any have been saved by the user for autocomplete purposes.&lt;br&gt;
For the third question, since the entry value is a date, I’ll specify the Date input type, which automatically applies the date format to the entry box.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F361n98go8dicz3k1s9uj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F361n98go8dicz3k1s9uj.png" alt="Date Input Box" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let’s add one more panel for Current Address and insert three text entry fields into it for Street address, City or Town, and Zip code. I’ll display the second and third questions together on a new line. And, since the Zip code field requires digits as an input type, I will set the input type to Number. Now let’s quickly check the Preview tab to make sure that the form looks exactly the way I expect it to. As you can see in the Preview tab, when you try to type letters in the zip code field, letters are not displayed since only the Number input type is allowed.&lt;br&gt;
The last question I want to add to this panel is Country. For this question with a long list of choices, the text entry question type is not the best option, so I’ll &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/dropdown-menu-model" rel="noopener noreferrer"&gt;use a dropdown box&lt;/a&gt; here. There are several &lt;a href="https://surveyjs.io/form-library/documentation/design-survey/pre-populate-form-fields" rel="noopener noreferrer"&gt;ways to populate a dropdown list with choices&lt;/a&gt;. The easiest way is to simply click each item either on the design surface or under the Choices category and assign a value to it. Another option is to type or copy and paste a list of choices in the Choices popup that appears as you click the Edit button here. But none of those options suit me because it's too time-consuming to enter a long list of countries. I also want my drop-down question to support a search-as-you-type option with server-side filtering, so a respondent can simply type in the input area to bring up a list of matches that have been filtered on the server side on the fly. To do this, I will populate my drop-down menu with data loaded from a REST API web service by adding a URL to the Service URL box under ‘Choices from a RESTful service’. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2cnpsf98ouv7lsprwxbx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2cnpsf98ouv7lsprwxbx.png" alt="Dropdown: Load Choices from RESTful API" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Although it’s a list of countries in this particular case, it can otherwise be used to populate a drop-down menu with any list of choices that you require. So what happens is that we store a list of countries in our database and the RESTful service sends a request to the server to get this list, filter the choices to match the respondent’s input values, and then send the list of matches to browsers. And the good news is that this drop-down functionality - whether single selection or multi selection - is included out-of-the-box, so you don’t need to integrate any third-party libraries.&lt;/p&gt;

&lt;p&gt;Now let’s add the remaining two questions to this page and move on to the second one. The next question is Email address. To make sure respondents enter their email correctly, I’ll set the input type to Email and add a placeholder saying ‘Enter your valid email address in an '&lt;a href="mailto:example@example.com"&gt;example@example.com&lt;/a&gt;' format’. The placeholder is the area inside the entry field. As you can see, if a respondent enters a bunch of random symbols here, the &lt;a href="https://surveyjs.io/form-library/examples/javascript-form-validation/reactjs" rel="noopener noreferrer"&gt;input validation&lt;/a&gt; kicks in and doesn’t let them proceed to the next question in the form.&lt;/p&gt;

&lt;p&gt;The last question on this page is Resume. To enable a user to upload their resume, I select a &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/file-model" rel="noopener noreferrer"&gt;File upload element&lt;/a&gt;, name it, and restrict its type to PDF format by specifying .pdf in ‘Accepted file types’ under General. All files uploaded by users are stored in the SurveyResults binary JSON file (the default file), but you can certainly configure a separate storage of answers and uploaded files on your server. I’ll also select the ‘Confirm file deletion’ option to make it easy for respondents to replace unwanted files, and the ‘Wait for the upload to complete’ option to make sure no file goes missing. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fncwzdpk6br9nns95qrqn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fncwzdpk6br9nns95qrqn.png" alt="File Upload" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OK. Great!&lt;/p&gt;

&lt;p&gt;Now let’s quickly add a &lt;a href="https://surveyjs.io/form-library/documentation/api-reference/radio-button-question-model" rel="noopener noreferrer"&gt;Radio button group&lt;/a&gt; to trigger creation of the next page. I opted for this question type instead of, say, checkboxes, because I need a respondent to select only one answer here. I’ll name the page Employment Details and assign a name and a title to its first question, which is ‘What is your current employment status?’ I’ll add a list of choices using the Choices popup this time. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhpgrrgp9dkqj8vzrqi1t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhpgrrgp9dkqj8vzrqi1t.png" alt="Radiogroup: Edit Choices" width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next question is a text entry field that says, ‘What is your expected graduation date?’ As you might have guessed, based on the list of choices for the previous question, this one is a follow-up question, and I only want it to be seen by those who answer ‘Student’ to the first question on the page. To do this, I’ll create a new conditional rule in the logic tab. To set a new rule, we need to select the main question, which in this case is ‘What is your current employment status?’ Then, we choose a condition for the dependent question to appear, which is that the reply ‘equals’ ‘Student’. If the condition is met, then the question ‘What year are you?’ is shown. &lt;strong&gt;Done&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb4kicws7t067jw48t3w7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb4kicws7t067jw48t3w7.png" alt="Logic Tab" width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s go to the Preview tab, select ‘Student’, and there it is, the follow-up question appears. &lt;/p&gt;

&lt;p&gt;You can also hide or show a form element or an entire page by setting up the &lt;a href="https://surveyjs.io/form-library/examples/condition-kids/reactjs" rel="noopener noreferrer"&gt;visibleIf/enableIf&lt;/a&gt; property of a question, panel, or page under the Logic category of the Property grid.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fldrwmm8r0e5n1jfw0ads.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fldrwmm8r0e5n1jfw0ads.png" alt="Logic: Visible If Expression" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next question is: What position are you applying for? It requires a single choice from respondents, so I can either go with a Radio button group again or choose a drop-down box. Let’s select a drop-down menu and populate its items with the values I prepared. The last two questions are ‘Expected monthly salary in USD’ and ‘Available Start Date’, which as we already know requires the date input type.&lt;br&gt;
Our form is almost ready. Let’s take a quick look at it in the Preview tab. Okay, it looks good but I don’t want it to take up the entire screen, so I’ll switch to the Survey settings level and under General, I need to change the width mode to Static and set the Width value to, say, 800px. By the way, you can also use any relative CSS units here - like vw and em. I’ll go with pixels this time. Responsive mode takes all available horizontal space. And Auto mode, as the name implies, automatically chooses between Static and Responsive modes depending on the type and width of questions in a form.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5q56i2wggy7eykknux6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5q56i2wggy7eykknux6.png" alt="Survey: Width Mode" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While we were configuring our survey, its JSON definition file that represents the survey model or schema is automatically generated for us.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9xojvjenbynpa28uhg8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9xojvjenbynpa28uhg8.png" alt="JSON Editor" width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now all we need to do is add the Form Library component to run the form in our test Angular application. Let’s do it!&lt;br&gt;
To add the Form Library component to your application, go to the Documentation and in the left menu under the Form Library, click ‘Get started’ and select Angular to see a &lt;a href="https://surveyjs.io/form-library/documentation/get-started-angular" rel="noopener noreferrer"&gt;step-by-step getting started guide&lt;/a&gt;. Alternatively, you can simply clone the &lt;a href="https://github.com/surveyjs/code-examples/tree/main/get-started-library/angular" rel="noopener noreferrer"&gt;library repository&lt;/a&gt;, install dependencies and open a ready-to-run sample Angular application in your IDE. &lt;/p&gt;

&lt;p&gt;We’ll start by installing the &lt;a href="https://www.npmjs.com/package/survey-angular-ui" rel="noopener noreferrer"&gt;survey-angular-ui npm package&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install survey-angular-ui --save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, we need to import the CSS file of the built-in theme to configure the style of our form.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  // ...
  "projects": {
    "project-name": {
      "projectType": "application",
      // ...
      "architect": {
        "build": {
          // ...
          "options": {
            // ...
            "styles": [
              "src/styles.css",
              // Default V2 theme
              "node_modules/survey-core/defaultV2.min.css",
              // Modern theme
              // "node_modules/survey-core/modern.min.css"
            ],
            // ...
          }
        }
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The next step is to instantiate a survey Model by passing the data schema to the Model constructor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Component, OnInit } from '@angular/core';
import { Model, StylesManager } from "survey-core";

StylesManager.applyTheme("defaultV2");

const surveyJson = {
  elements: [{
    name: "FirstName",
    title: "Enter your first name:",
    type: "text"
  }, {
    name: "LastName",
    title: "Enter your last name:",
    type: "text"
  }]
};

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
  title = 'My First Survey';
  surveyModel: Model;
  ngOnInit() {
    const survey = new Model(surveyJson);
    this.surveyModel = survey;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we need to import the framework-specific rendering component and pass the Model instance to the component's model attribute.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// app.module.ts
// ...
import { SurveyModule } from "survey-angular-ui";

@NgModule({
  declarations: [ ... ],
  imports: [
    ...,
    SurveyModule
  ],
  providers: [ ... ],
  bootstrap: [ ... ]
})
export class AppModule { }
...
&amp;lt;survey [model]="surveyModel"&amp;gt;&amp;lt;/survey&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, let’s copy and replace the sample JSON schema with the one we created.&lt;/p&gt;

&lt;p&gt;Run the &lt;code&gt;npm start&lt;/code&gt; command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here it is!&lt;/p&gt;

&lt;p&gt;As you can see, it only took a few minutes to get started and run our form. The SurveyJS Library comes with &lt;a href="https://surveyjs.io/form-library/examples/nps-question/reactjs" rel="noopener noreferrer"&gt;over a hundred free demos&lt;/a&gt;, and it is completely free, so make sure to add it to your application today! &lt;/p&gt;

</description>
      <category>form</category>
      <category>survey</category>
      <category>angular</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
