{"id":12254,"date":"2024-04-09T10:50:32","date_gmt":"2024-04-09T07:50:32","guid":{"rendered":"https:\/\/dhtmlx.com\/blog\/?p=12254"},"modified":"2024-04-09T15:56:58","modified_gmt":"2024-04-09T12:56:58","slug":"creating-simple-login-form-javascript-ui-library-dhtmlx-suite","status":"publish","type":"post","link":"https:\/\/dhtmlx.com\/blog\/creating-simple-login-form-javascript-ui-library-dhtmlx-suite\/","title":{"rendered":"Creating a Simple Login Form with JavaScript UI Library of DHTMLX Suite"},"content":{"rendered":"<p>Forms can be used in web apps for multiple purposes, but the most common application scenarios are user authentication and authorization via login forms. Such forms are an integral part of identity access management (IAM) aimed at securely managing user validation and resource access. According to Statista, the IAM market generated approximately 16.17 billion U.S. dollars in revenue during 2023, and this number is expected to reach around 18.5 billion U.S. dollars in 2024. <\/p>\n<p>In this blog post, we provide you with a step-by-step guide on how to build a basic login form using our <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSuite\/\" rel=\"noopener\" target=\"_blank\">JavaScript UI widget library<\/a>.<\/p>\n<h5>Step 1: Creating a Window<\/h5>\n<p>First of all, let us create a window that will contain our future login form. DHTMLX Suite includes a widget (<a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxWindow\/\" rel=\"noopener\" target=\"_blank\">DHTMLX Window<\/a>) for implementing this functionality as well, so it will be convenient to use this widget at this stage.<\/p>\n<p>The <a href=\"https:\/\/docs.dhtmlx.com\/suite\/window\/how_to_start\/\" rel=\"noopener\" target=\"_blank\">initialization<\/a> is pretty simple and presupposes the use of the <strong>dhx.Window<\/strong> object constructor:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">const<\/span> winForm <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> dhx.<span class=\"me1\">Window<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span> <br \/>\n&nbsp; &nbsp; width<span class=\"sy0\">:<\/span> <span class=\"nu0\">550<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/ width of the window<\/span><br \/>\n&nbsp; &nbsp; height<span class=\"sy0\">:<\/span> <span class=\"nu0\">600<\/span> <span class=\"co1\">\/\/ height of the window<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><br \/>\nwinForm.<span class=\"me1\">show<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ opens the window<\/span><\/div><\/div>\n<p>As a result, you should get a simple window element on your web page.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/image3.png\" alt=\"Login form - blank window\" width=\"449\" height=\"489\" class=\"aligncenter size-full wp-image-12255\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/image3.png 449w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/image3-275x300.png 275w\" sizes=\"auto, (max-width: 449px) 100vw, 449px\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/97va0k1v?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<h5>Step 2: Adding a Tabbar to the Window<\/h5>\n<p>The next step is to add a tabbar element to the window created in the previous step. For this purpose, we will use the corresponding <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxTabbar\/\" rel=\"noopener\" target=\"_blank\">widget<\/a> from the Suite library.<\/p>\n<p>The tabbar is <a href=\"https:\/\/docs.dhtmlx.com\/suite\/tabbar\/init\/\" rel=\"noopener\" target=\"_blank\">initialized<\/a> similarly with the <strong>dhx.Tabbar<\/strong> object constructor:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">const<\/span> loginTabbar <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> dhx.<span class=\"me1\">Tabbar<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">null<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; mode<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;top&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/ specifies the location of tabs<\/span><br \/>\n&nbsp; &nbsp; tabAlign<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;middle&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/ defines the tabs align<\/span><br \/>\n&nbsp; &nbsp; css<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;dhx_widget--bordered&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/ css classes applying to our tabbar<\/span><br \/>\n&nbsp; &nbsp; views<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span> <span class=\"co1\">\/\/the list of the tabs<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span> tab<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;login&quot;<\/span><span class=\"sy0\">,<\/span> id<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;login&quot;<\/span> <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><\/div><\/div>\n<p>You may notice that we\u2019re adding <strong>&#8220;dhx_widget&#8211;bordered&#8221;<\/strong> CSS class to the tabbar, but it is not defined anywhere.<\/p>\n<p>This is one of the predefined CSS classes available in DHTMLX Suite. You can check the full list with the details on this <a href=\"https:\/\/docs.dhtmlx.com\/suite\/helpers\/base_elements\/\" rel=\"noopener\" target=\"_blank\">documentation page<\/a>.<\/p>\n<p>This CSS class is used to add borders on all sides of the tabbar.<\/p>\n<p>Now, you need to attach the tabbar to the window. It is done with the <strong><a href=\"https:\/\/docs.dhtmlx.com\/suite\/window\/api\/window_attach_method\/\" rel=\"noopener\" target=\"_blank\">attach()<\/a><\/strong> method that should be added after the tabbar initialization:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">winForm.<span class=\"me1\">attach<\/span><span class=\"br0\">&#40;<\/span>loginTabbar<span class=\"br0\">&#41;<\/span><\/div><\/div>\n<p>Note that when attaching a tabbar to a window with the <strong>attach()<\/strong> method you should not define any container for the tabbar, since <strong>dhx.Window<\/strong> will serve as this container. Therefore, you should use <em>null<\/em> as the first parameter in its constructor:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">const<\/span> loginTabbar <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> dhx.<span class=\"me1\">Tabbar<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">null<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span> \u2026<\/div><\/div>\n<p>Now, the initialization code should look like this:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">const<\/span> winForm <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> dhx.<span class=\"me1\">Window<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span> <br \/>\n&nbsp; &nbsp; closable<span class=\"sy0\">:<\/span> <span class=\"kw2\">false<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; width<span class=\"sy0\">:<\/span> <span class=\"nu0\">550<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; height<span class=\"sy0\">:<\/span> <span class=\"nu0\">600<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><br \/>\nwinForm.<span class=\"me1\">show<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">const<\/span> loginTabbar <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> dhx.<span class=\"me1\">Tabbar<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">null<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; mode<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;top&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; tabAlign<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;middle&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; css<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;dhx_widget--bordered&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; views<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span> tab<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;login&quot;<\/span><span class=\"sy0\">,<\/span> id<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;login&quot;<\/span> <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><br \/>\nwinForm.<span class=\"me1\">attach<\/span><span class=\"br0\">&#40;<\/span>loginTabbar<span class=\"br0\">&#41;<\/span><\/div><\/div>\n<p>That\u2019s how you will complement the window with a blank &#8220;Login&#8221; tab that will be further elaborated in the next step.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/image1-1.png\" alt=\"login form - window with a login tab\" width=\"446\" height=\"485\" class=\"aligncenter size-full wp-image-12256\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/image1-1.png 446w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/image1-1-276x300.png 276w\" sizes=\"auto, (max-width: 446px) 100vw, 446px\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/xdbx3uid?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<h5>Step 3: Creating a Form<\/h5>\n<p>Now, we proceed to the most interesting part of our guide, namely adding a login form to the tabbar with the <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxForm\/\" rel=\"noopener\" target=\"_blank\">DHTMLX Form<\/a> widget. <\/p>\n<p>Once again, we start with the <a href=\"https:\/\/docs.dhtmlx.com\/suite\/form\/how_to_start\/\" rel=\"noopener\" target=\"_blank\">initialization<\/a> of the Form widget:<\/p>\n<p>First, create the <strong>form<\/strong> object:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">const<\/span> loginForm <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> dhx.<span class=\"me1\">Form<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">null<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span> <br \/>\n&nbsp; &nbsp; padding<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;40px 10px 10px 10px&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/ paddings of the form<\/span><br \/>\n&nbsp; &nbsp; rows<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span> <span class=\"co1\">\/\/structure of the form controls group<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><\/div><\/div>\n<p>After that, you need to attach the form to the tabbar:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">loginTabbar.<span class=\"me1\">cell<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;login&quot;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">attach<\/span><span class=\"br0\">&#40;<\/span>loginForm<span class=\"br0\">&#41;<\/span><\/div><\/div>\n<p>To make the form interactive, you need to add the following form controls:<\/p>\n<ol>\n<li>Input for the username<\/li>\n<li>Input for the password<\/li>\n<li>Button for the form submission<\/li>\n<\/ol>\n<p>More details on the input control are provided on this <a href=\"https:\/\/docs.dhtmlx.com\/suite\/form\/input\/\" rel=\"noopener\" target=\"_blank\">documentation page<\/a>. <\/p>\n<p>The username input will have a simple config:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"br0\">&#123;<\/span><br \/>\nlabel<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Username&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/control label<\/span><br \/>\n&nbsp; &nbsp; &nbsp; type<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;input&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/control type<\/span><br \/>\n&nbsp; &nbsp; &nbsp; name<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;user&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/control name used during the form sending<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><\/div><\/div>\n<p>With the password input control, you\u2019ll also need to define the &#8220;password&#8221; input type for it:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; label<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Password&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; type<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;input&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; name<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;pass&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; inputType<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;password&quot;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><\/div><\/div>\n<p>The Login button configuration looks like this:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; name<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;login&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; type<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;button&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; submit<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/enables the button to send form data to a server <\/span><br \/>\n&nbsp; text<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Log in&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/text of the button<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>After putting together all these parts in the form config, you will get the following:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">const<\/span> loginForm <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> dhx.<span class=\"me1\">Form<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">null<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; padding<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;40px 10px 10px 10px&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; rows<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;label<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Username&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;type<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;input&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;name<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;user&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;label<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Password&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;type<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;input&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;name<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;pass&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inputType<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;password&quot;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;name<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;login&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;type<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;button&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;submit<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;text<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Log in&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"br0\">&#93;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><br \/>\nloginTabbar.<span class=\"me1\">cell<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;login&quot;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">attach<\/span><span class=\"br0\">&#40;<\/span>loginForm<span class=\"br0\">&#41;<\/span><\/div><\/div>\n<p>That&#8217;s what you should see in the UI:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/image2.png\" alt=\"login form - login button\" width=\"446\" height=\"485\" class=\"aligncenter size-full wp-image-12257\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/image2.png 446w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/image2-276x300.png 276w\" sizes=\"auto, (max-width: 446px) 100vw, 446px\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/jme9fp4e?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>Then, you need to pay attention to the arrangement of added elements. Specifically, you need to align the Login button to the right side of the form. You cannot align the controls themselves. Alignment can be applied to the form group sections only i.e. rows or columns.<\/p>\n<p>At this point, you have only a single &#8220;rows&#8221; group allowing you to arrange the nested controls as rows. So you need to add one more section to the form to change the alignment. It will be the column section (&#8220;cols&#8221;). For this section, you should set &#8220;<strong>align: &#8216;end&#8217;<\/strong>&#8220;. After that, you add the Button control to this section.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">const<\/span> loginForm <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> dhx.<span class=\"me1\">Form<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">null<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; padding<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;40px 10px 10px 10px&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; rows<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Username&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;input&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;user&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Password&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;input&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;pass&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inputType<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;password&quot;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; align<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;end&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cols<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;login&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;button&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; submit<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Log in&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><\/div><\/div>\n<p>As a result, the Login button will be aligned to the right side of the form:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/image4.png\" alt=\"loging form - login button alignment\" width=\"446\" height=\"485\" class=\"aligncenter size-full wp-image-12258\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/image4.png 446w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2024\/04\/image4-276x300.png 276w\" sizes=\"auto, (max-width: 446px) 100vw, 446px\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/6vp1hv16?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<h5>Step 4: Adding the Form Actions<\/h5>\n<p>The form acquired its final appearance, but you also need to add the login action to make it fully functional.<\/p>\n<p>In this guide, we do not include any real backend, so you just have to add the <a href=\"https:\/\/docs.dhtmlx.com\/suite\/form\/api\/button\/button_click_event\/\" rel=\"noopener\" target=\"_blank\">click<\/a> event to the form button. Also, you need to make sure that the information entered by users is valid and hide the login window at the end. Programmatically, it is done using the following piece of code:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">loginForm.<span class=\"me1\">getItem<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;login&quot;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">events<\/span>.<span class=\"me1\">on<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;click&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span> <span class=\"br0\">&#40;<\/span>events<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; let values <span class=\"sy0\">=<\/span> loginForm.<span class=\"me1\">getValue<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>values.<span class=\"me1\">user<\/span> <span class=\"sy0\">==<\/span> <span class=\"st0\">&quot;user&quot;<\/span> <span class=\"sy0\">&amp;&amp;<\/span> values.<span class=\"me1\">pass<\/span> <span class=\"sy0\">==<\/span> <span class=\"st0\">&quot;password&quot;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; dhx.<span class=\"me1\">alert<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; header<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Welcome&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;You have successfully logged in&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buttonsAlignment<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;center&quot;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; winForm.<span class=\"me1\">hide<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>To inform end-users about successful login completion, use the <strong>dhx.Alert<\/strong> message.<\/p>\n<p>According to the <a href=\"https:\/\/docs.dhtmlx.com\/suite\/message\/configuration\/#alert-box\" rel=\"noopener\" target=\"_blank\">docs<\/a>, you can use the following code:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">dhx.<span class=\"me1\">alert<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; header<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Welcome&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; text<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;You have successfully logged in&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; buttonsAlignment<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;center&quot;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>As a result, you get:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">loginForm.<span class=\"me1\">getItem<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;login&quot;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">events<\/span>.<span class=\"me1\">on<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;click&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span> <span class=\"br0\">&#40;<\/span>events<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; let values <span class=\"sy0\">=<\/span> loginForm.<span class=\"me1\">getValue<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>values.<span class=\"me1\">user<\/span> <span class=\"sy0\">==<\/span> <span class=\"st0\">&quot;user&quot;<\/span> <span class=\"sy0\">&amp;&amp;<\/span> values.<span class=\"me1\">pass<\/span> <span class=\"sy0\">==<\/span> <span class=\"st0\">&quot;password&quot;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; dhx.<span class=\"me1\">alert<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; header<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Welcome&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;You have successfully logged in&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buttonsAlignment<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;center&quot;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; winForm.<span class=\"me1\">hide<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Using this <a href=\"https:\/\/snippet.dhtmlx.com\/4vmdqkbm?mode=wide\" rel=\"noopener\" target=\"_blank\">sample<\/a>, you can fully reproduce the login process.<\/p>\n<p>But you also have to ensure that the system will react correctly when invalid credentials are entered into the form:<\/p>\n<ol>\n<li>Inform the user about invalid data<\/li>\n<li>Clear the form so that it can be refilled.<\/li>\n<\/ol>\n<p>To inform users about invalid input, you can make use of another Suite widget &#8211; <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxMessage\/\" rel=\"noopener\" target=\"_blank\">Message<\/a>.<\/p>\n<p>It can be <a href=\"https:\/\/docs.dhtmlx.com\/suite\/message\/configuration\/#message-box\" rel=\"noopener\" target=\"_blank\">configured<\/a> during the initialization process:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">&nbsp;dhx.<span class=\"me1\">message<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp;text<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Incorrect login\/password&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp;icon<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;dxi dxi-alert-circle&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp;css<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;error&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>In the <strong>icon<\/strong> property, you can use a set of <a href=\"https:\/\/docs.dhtmlx.com\/suite\/helpers\/icon\/\" rel=\"noopener\" target=\"_blank\">default icons<\/a> provided for the Suite library.<\/p>\n<p>As for the background CSS, it can be specified in the following way:<\/p>\n<div class=\"codecolorer-container css default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"css codecolorer\">&nbsp; &nbsp; .error<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">background<\/span><span class=\"sy0\">:<\/span> <span class=\"re0\">#FFCACA<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>The final step is to add this message to the <strong>click<\/strong> event:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">loginForm.<span class=\"me1\">getItem<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;login&quot;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">events<\/span>.<span class=\"me1\">on<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;click&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span> <span class=\"br0\">&#40;<\/span>events<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; let values <span class=\"sy0\">=<\/span> loginForm.<span class=\"me1\">getValue<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>values.<span class=\"me1\">user<\/span> <span class=\"sy0\">==<\/span> <span class=\"st0\">&quot;user&quot;<\/span> <span class=\"sy0\">&amp;&amp;<\/span> values.<span class=\"me1\">pass<\/span> <span class=\"sy0\">==<\/span> <span class=\"st0\">&quot;password&quot;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; dhx.<span class=\"me1\">alert<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; header<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Welcome&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;You have successfully logged in&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buttonsAlignment<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;center&quot;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; winForm.<span class=\"me1\">hide<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span> <span class=\"kw1\">else<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; dhx.<span class=\"me1\">message<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Incorrect login\/password&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; icon<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;dxi dxi-alert-circle&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; css<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;error&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; loginForm.<span class=\"me1\">clear<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>That&#8217;s it, your login form is ready, and it should be similar to the form shown in this <a href=\"https:\/\/snippet.dhtmlx.com\/3trprqvx?mode=wide\" rel=\"noopener\" target=\"_blank\">sample<\/a>.<\/p>\n<h5>Conclusion<\/h5>\n<p>The Suite\u2019s form widget is a suitable tool for building and customizing various types of forms, including login forms. Following the steps described in this blog post, you can add a basic login form to a web page with minimum time and effort. Stay tuned for Part 2, where we will show you how to complement this basic login form with additional capabilities.<\/p>\n<h5>Related Materials<\/h5>\n<ul>\n<li><a href=\"https:\/\/docs.dhtmlx.com\/suite\/\" rel=\"noopener\" target=\"_blank\">DHTMLX Suite documentation<\/a><\/li>\n<li><a href=\"https:\/\/snippet.dhtmlx.com\/cnxi9eqq?tag=form\" rel=\"noopener\" target=\"_blank\">DHTMLX Suite snippets<\/a><\/li>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSuite\/download.shtml\" rel=\"noopener\" target=\"_blank\">Free 30-day trial version<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Forms can be used in web apps for multiple purposes, but the most common application scenarios are user authentication and authorization via login forms. Such forms are an integral &#8230;<\/p>\n","protected":false},"author":101014,"featured_media":12272,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[71],"tags":[33,10],"class_list":["post-12254","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-all-posts","tag-dhtmlxsuite"],"_links":{"self":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/12254","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=12254"}],"version-history":[{"count":14,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/12254\/revisions"}],"predecessor-version":[{"id":12274,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/12254\/revisions\/12274"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media\/12272"}],"wp:attachment":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media?parent=12254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/categories?post=12254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/tags?post=12254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}