{"id":12288,"date":"2024-04-30T18:44:43","date_gmt":"2024-04-30T15:44:43","guid":{"rendered":"https:\/\/dhtmlx.com\/blog\/?p=12288"},"modified":"2024-05-02T15:33:20","modified_gmt":"2024-05-02T12:33:20","slug":"registration-form-with-validation-javascript-form-widget","status":"publish","type":"post","link":"https:\/\/dhtmlx.com\/blog\/registration-form-with-validation-javascript-form-widget\/","title":{"rendered":"Building a Registration Form with Validation Using the DHTMLX JavaScript Form Widget"},"content":{"rendered":"<p>As promised, we come back with a new tutorial that will help us further unleash the customization potential of the DHTMLX Form. Last time, you learned how to build a <a href=\"https:\/\/dhtmlx.com\/blog\/creating-simple-login-form-javascript-ui-library-dhtmlx-suite\/\" rel=\"noopener\" target=\"_blank\">basic login form<\/a> using this JavaScript widget from our Suite library. Now it is time to take a step forward and show you how to enrich the existing form with a registration option. <\/p>\n<h5>Step 1: Adding a New Tab to the Tabbar in the Form<\/h5>\n<p>If you need to be reminded how to initialize the Form widget, take a look at the previous tutorial. Now we&#8217;ll continue from the point we stopped last time.<\/p>\n<p>We start by adding a new tab to the tabbar:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">const loginTabbar = new dhx.Tabbar(null, {<br \/>\n&nbsp; &nbsp; mode: &quot;top&quot;,<br \/>\n&nbsp; &nbsp; tabAlign: &quot;middle&quot;,<br \/>\n&nbsp; &nbsp; css: &quot;dhx_widget--bordered&quot;,<br \/>\n&nbsp; &nbsp; views: [<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; { tab: &quot;login&quot;, id: &quot;login&quot; },<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; { tab: &quot;signup&quot;, id: &quot;signup&quot; }<br \/>\n&nbsp; &nbsp; ]<br \/>\n})<\/div><\/div>\n<p>After that, you need to create a new form object that will be used for registration:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">const signUpForm = new dhx.Form(null, {<br \/>\n&nbsp; &nbsp; rows: []<br \/>\n})<\/div><\/div>\n<p>Next, you attach the object to the created tab:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">loginTabbar.cell(&quot;signup&quot;).attach(signUpForm)<\/div><\/div>\n<p>Here is what the result should look like:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step1.png\" alt=\"registration form tabs\" width=\"553\" height=\"605\" class=\"aligncenter size-full wp-image-12291\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step1.png 553w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step1-274x300.png 274w\" sizes=\"auto, (max-width: 553px) 100vw, 553px\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/b4mkc192?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<h5>Step 2: Populating the Form<\/h5>\n<p>Now, we can proceed to the most time-consuming stage of the tutorial, namely, populating a blank &#8220;SINGUP&#8221; tab with necessary controls.<\/p>\n<p>First, add the <a href=\"https:\/\/docs.dhtmlx.com\/suite\/form\/fieldset\/\" rel=\"noopener\" target=\"_blank\">fieldset<\/a> control to the form. This control serves for organizing form elements into groups.<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">const signUpForm = new dhx.Form(null, {<br \/>\n&nbsp; &nbsp; rows: [<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: &quot;fieldset&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label: &quot;Account&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rows: []<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; },<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: &quot;fieldset&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label: &quot;Personal information&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rows: []<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; }<br \/>\n&nbsp; &nbsp; ]<br \/>\n})<\/div><\/div>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step2.png\" alt=\"registration form fields\" width=\"553\" height=\"603\" class=\"aligncenter size-full wp-image-12293\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step2.png 553w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step2-275x300.png 275w\" sizes=\"auto, (max-width: 553px) 100vw, 553px\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/mbo59mhu?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>As a result, the registration form now includes two fieldset sections &#8211; &#8220;Account&#8221; and &#8220;Personal information&#8221;.<\/p>\n<p>Next, you add the input field for the &#8220;Username&#8221; to the &#8220;Account&#8221; section:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">&nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: &quot;fieldset&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label: &quot;Account&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rows: [<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label: &quot;Username&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: &quot;input&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name: &quot;user&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelPosition: &quot;left&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelWidth: 120,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; required: true,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; },<\/div><\/div>\n<p>It is required to add some validation for this field to ensure data integrity in the form. It will be allowed to enter only A-Z, a-z, and &#8220;-&#8221; characters in this field:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label: &quot;Username&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: &quot;input&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name: &quot;user&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelPosition: &quot;left&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelWidth: 120,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; required: true,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; validation: function (value) {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const regexp = \/^[a-zA-Z\\-]+$\/;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return regexp.test(value)<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<\/div><\/div>\n<p>Also, specify an error message that will be displayed in case end-users enter some other symbols:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label: &quot;Username&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: &quot;input&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name: &quot;user&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelPosition: &quot;left&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelWidth: 120,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; required: true,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; validation: function (value) {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const regexp = \/^[a-zA-Z\\-]+$\/;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return regexp.test(value)<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; errorMessage: &quot;Must contain only characters A-Z, a-z, and -&quot;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<\/div><\/div>\n<p>That&#8217;s how it should work:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step3.png\" alt=\"registration form message\" width=\"554\" height=\"604\" class=\"aligncenter size-full wp-image-12296\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step3.png 554w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step3-275x300.png 275w\" sizes=\"auto, (max-width: 554px) 100vw, 554px\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/v8ddye5u?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>Now you need to add the input field for email.<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label: &quot;Email&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: &quot;input&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name: &quot;email&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelPosition: &quot;left&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelWidth: 120,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; required: true,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; validation: &quot;email&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; errorMessage: &quot;Please, enter a valid email&quot;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<\/div><\/div>\n<p>Just like with &#8220;Username&#8221;, this field should also follow certain validation rules.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step4.png\" alt=\"registration form validation\" width=\"555\" height=\"604\" class=\"aligncenter size-full wp-image-12297\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step4.png 555w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step4-276x300.png 276w\" sizes=\"auto, (max-width: 555px) 100vw, 555px\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/y87toqf6?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>When using our Form widget, you don&#8217;t need to worry about setting your own validation rules, as our widget suggests a suitable solution by default. The list of all available predefined validation rules can be found <a href=\"https:\/\/docs.dhtmlx.com\/suite\/form\/work_with_form\/#validation-rules\" rel=\"noopener\" target=\"_blank\">on this documentation page<\/a>.<\/p>\n<p>It is hard to imagine a registration form without fields for the password and its confirmation. The configuration of these fields must also include validation and error messages.<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label: &quot;Password&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: &quot;input&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name: &quot;pass&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inputType: &quot;password&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelPosition: &quot;left&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelWidth: 120,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; required: true,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; validation: function (value) {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const regexp = \/(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,}\/;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return regexp.test(value)<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; errorMessage: &quot;Must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters&quot;<br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label: &quot;Confirm password&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: &quot;input&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name: &quot;pass_conf&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inputType: &quot;password&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelPosition: &quot;left&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelWidth: 120,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; required: true,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; validation: function (val) {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return val &amp;&amp; signUpForm.getItem(&quot;pass&quot;).getValue() == val<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; errorMessage: &quot;Please, verify your entered password&quot;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<\/div><\/div>\n<p>After adding these fields, your form should look as follows:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step5.png\" alt=\"registration form password\" width=\"554\" height=\"603\" class=\"aligncenter size-full wp-image-12298\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step5.png 554w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step5-276x300.png 276w\" sizes=\"auto, (max-width: 554px) 100vw, 554px\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/q428bbxx?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>At this stage, you get a basic registration form with all the necessary fields, but you can extend it with some additional controls.<\/p>\n<p>You can add the possibility of choosing the type of account: personal or business. You can do it using the <a href=\"https:\/\/docs.dhtmlx.com\/suite\/form\/radiogroup\/\" rel=\"noopener\" target=\"_blank\">radio group control<\/a> of DHTMLX Form:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;type: &quot;radiogroup&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;label: &quot;Account type&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;labelPosition: &quot;left&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;labelWidth: 120,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;required: true,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;name: &quot;acc_type&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;options: { \/\/list of the radioboxes used in the group<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cols: [ \/\/ direction of the radioboxes<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;type: &quot;radioButton&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;text: &quot;Personal&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;name: &quot;person&quot;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;},<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;type: &quot;radioButton&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;text: &quot;Business&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;name: &quot;business&quot;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;]<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;},<\/div><\/div>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step6.png\" alt=\"registration form radio group\" width=\"555\" height=\"605\" class=\"aligncenter size-full wp-image-12299\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step6.png 555w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step6-275x300.png 275w\" sizes=\"auto, (max-width: 555px) 100vw, 555px\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/xdn7jg4a?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>Now we come to the &#8220;Personal information&#8221; fieldset. Here you can also add several basic controls. For instance, you can add inputs for &#8220;First name&#8221; and &#8220;Last name&#8221;:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">&nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: &quot;fieldset&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label: &quot;Personal information&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rows: [<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label: &quot;First name&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: &quot;input&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name: &quot;name&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelPosition: &quot;left&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelWidth: 120,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label: &quot;Last name&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: &quot;input&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name: &quot;surname&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelPosition: &quot;left&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelWidth: 120,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; }<\/div><\/div>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step7.png\" alt=\"registration form personal info\" width=\"555\" height=\"605\" class=\"aligncenter size-full wp-image-12300\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step7.png 555w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step7-275x300.png 275w\" sizes=\"auto, (max-width: 555px) 100vw, 555px\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/s0c3t5ku?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>One more useful option that can be added to this section of your form is the date of birth. You can specify this parameter with the <a href=\"https:\/\/docs.dhtmlx.com\/suite\/form\/calendar\/\" rel=\"noopener\" target=\"_blank\">datePicker<\/a> control:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label: &quot;Date of birth&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: &quot;datePicker&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name: &quot;birth&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelPosition: &quot;left&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelWidth: 120,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dateFormat: &quot;%d\/%m\/%Y&quot;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<\/div><\/div>\n<p>You also can define the preferred date format with the <strong>dateFormat<\/strong> property. The value of this property includes a mask of the date according to the template. The details can be found on this <a href=\"https:\/\/docs.dhtmlx.com\/suite\/calendar\/api\/calendar_dateformat_config\/\" rel=\"noopener\" target=\"_blank\">page<\/a>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step8.png\" alt=\"registration form calendar\" width=\"555\" height=\"605\" class=\"aligncenter size-full wp-image-12301\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step8.png 555w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step8-275x300.png 275w\" sizes=\"auto, (max-width: 555px) 100vw, 555px\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/vpmnf0vi?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>One more possible option is specifying the user&#8217;s gender. To add this to your form, you&#8217;ll need the <a href=\"https:\/\/docs.dhtmlx.com\/suite\/form\/select\/\" rel=\"noopener\" target=\"_blank\">Select<\/a> control that provides a set of options to choose from.<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: &quot;select&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label: &quot;Gender&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name: &quot;gender&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelPosition: &quot;left&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelWidth: 120,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; options: [ \/\/list of the select options<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { content: &quot;&quot;, value: &quot;&quot; },<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { content: &quot;Man&quot;, value: &quot;man&quot; },<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { content: &quot;Woman&quot;, value: &quot;woman&quot; },<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { content: &quot;Another gender identity&quot;, value: &quot;other&quot; }<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<\/div><\/div>\n<p>It is also common to enable end-users to enter multi-line text in the form. In our case, it is the &#8220;About me&#8221; section implemented with the <a href=\"https:\/\/docs.dhtmlx.com\/suite\/form\/textarea\/\" rel=\"noopener\" target=\"_blank\">textarea<\/a> control.<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: &quot;textarea&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label: &quot;About me&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelPosition: &quot;left&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelWidth: 120,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/div><\/div>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step9.png\" alt=\"registration form about me\" width=\"555\" height=\"605\" class=\"aligncenter size-full wp-image-12302\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step9.png 555w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step9-275x300.png 275w\" sizes=\"auto, (max-width: 555px) 100vw, 555px\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/cplzt7bs?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>It is also useful to establish a legal agreement with end-users related to the use of their personal information by adding a corresponding checkbox. This <a href=\"https:\/\/docs.dhtmlx.com\/suite\/form\/checkbox\/\" rel=\"noopener\" target=\"_blank\">control<\/a> is also available in our Form widget.<\/p>\n<p>The config may look like this:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">&nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: &quot;checkbox&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; labelPosition: &quot;left&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text: &quot;I agree to the Terms and Conditions.&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; required: true<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; },<\/div><\/div>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step10.png\" alt=\"registration form checkbox\" width=\"555\" height=\"605\" class=\"aligncenter size-full wp-image-12303\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step10.png 555w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/step10-275x300.png 275w\" sizes=\"auto, (max-width: 555px) 100vw, 555px\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/imonj1ae?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>As the final touch, you need to add the &#8220;Signup&#8221; button with the corresponding <a href=\"https:\/\/docs.dhtmlx.com\/suite\/form\/button\/\" rel=\"noopener\" target=\"_blank\">Form control<\/a>:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">&nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: &quot;button&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name: &quot;register&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; submit: true,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; value: &quot;Submit&quot;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; }<\/div><\/div>\n<p>In terms of the form appearance, the final version should be similar to this <a href=\"https:\/\/snippet.dhtmlx.com\/nymb36wy\" rel=\"noopener\" target=\"_blank\">sample<\/a>. But we also want to show you how to add the submit action logic to your form. <\/p>\n<h5>Step 3: Adding Actions to the Form<\/h5>\n<p>In this tutorial, we do not use any real backend, so we just want to show you how to implement the mechanism that detects when an end-user presses the Submit button. You need to add the <strong>click<\/strong> event to the form configuration. This event fires after a click on the Button control.<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">signUpForm.getItem(&quot;register&quot;).events.on(&quot;click&quot;, function (events) {<br \/>\n})<\/div><\/div>\n<p>It will trigger the validation of your form. As a result, an end-user will be informed that the form is filled out correctly:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">signUpForm.getItem(&quot;register&quot;).events.on(&quot;click&quot;, function (events) {<br \/>\n&nbsp; if (signUpForm.validate()){<br \/>\n&nbsp; &nbsp; dhx.alert({<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; text: &quot;Thank you for signing up&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; buttonsAlignment: &quot;center&quot;<br \/>\n&nbsp; &nbsp; });<br \/>\n&nbsp; &nbsp; signUpForm.clear();<br \/>\n&nbsp; }<br \/>\n})<\/div><\/div>\n<p>Otherwise, the form will show an error message:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"text codecolorer\">signUpForm.getItem(&quot;register&quot;).events.on(&quot;click&quot;, function (events) {<br \/>\n&nbsp; if (signUpForm.validate()){<br \/>\n&nbsp; &nbsp; dhx.alert({<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; text: &quot;Thank you for signing up&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; buttonsAlignment: &quot;center&quot;<br \/>\n&nbsp; &nbsp; });<br \/>\n&nbsp; &nbsp; signUpForm.clear();<br \/>\n&nbsp; } else {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; dhx.message({<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text: &quot;Please, fill in all the required fields&quot;,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; css: &quot;error&quot;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; });<br \/>\n&nbsp; }<br \/>\n})<\/div><\/div>\n<p>That&#8217;s it. You can test the core functionality of the form using this <a href=\"https:\/\/snippet.dhtmlx.com\/67jhzax8\" rel=\"noopener\" target=\"_blank\">sample<\/a>.<\/p>\n<h5>Wrapping Up<\/h5>\n<p>According to <a href=\"https:\/\/www.capterra.com\/resources\/key-event-management-software-features\/\" rel=\"noopener\" target=\"_blank\">Capterra<\/a>, 86% of event management software reviewers identify registration management as a highly important feature. Therefore, it can be a tricky and time-consuming task to implement a registration form from scratch. This tutorial gives you a complete understanding of how to do it much faster using DHTMLX Form. You can test this and other UI widgets from DHTMLX Suite for free in your web project by downloading a <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSuite\/download.shtml\" rel=\"noopener\" target=\"_blank\">30-day trial version<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As promised, we come back with a new tutorial that will help us further unleash the customization potential of the DHTMLX Form. Last time, you learned how to build &#8230;<\/p>\n","protected":false},"author":101014,"featured_media":12307,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[71,1],"tags":[33,10],"class_list":["post-12288","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","category-uncategorized","tag-all-posts","tag-dhtmlxsuite"],"_links":{"self":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/12288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/users\/101014"}],"replies":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/comments?post=12288"}],"version-history":[{"count":9,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/12288\/revisions"}],"predecessor-version":[{"id":12309,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/12288\/revisions\/12309"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media\/12307"}],"wp:attachment":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media?parent=12288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/categories?post=12288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/tags?post=12288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}