Я бы хотел, чтобы формы в JS действовали так, как будто они наследуются ... Например, я могу легко добавлять элементы формы весь день, используя цикл for, но я бы предпочел оставить себе свободу вставлять другой элемент в середине. Другими словами, я хочу, чтобы это было «модульным» и имело базовый класс, который может генерировать что-то простое, например, экран входа в систему, но затем расширить его, включив раскрывающиеся списки между текстовыми полями. Есть идеи, как это сделать? Желательно с классами ES6 и импортом / экспортом и без чепухи.
В идеале у меня был бы класс с именем BasicForm
и RegistrationForm extends BasicForm
. Таким образом, я мог бы просто хранить имена полей в массиве и изменять этот файл один раз, если мне нужно было внести изменения, а не менять все. Вот существующий код ... Обратите внимание, что "счета-фактуры" отображается только в том случае, если выбран вариант роли пользователя "admin" .... что делает идею попытки сделать все это очень трудной для понимания. Есть ли способ процедурно с помощью начальной загрузки и пользовательских классов генерировать это из Javascript с использованием классов ES6, чтобы модуль можно было повторно использовать для создания форм с раскрывающимися списками или без них?
HTML:
<div class= "row"> <!--Inherits background from .body-->
<div class="col-hidden col-sm col-md col-lg col-xl"> <!--spacing divs inherit background from .body-->
</div>
<div class="form-box rounded col-12 col-xs col-sm-7 col-md-6 col-lg-4 col-xl-3"> <!--Actual box containing fields and prompts and buttons changes to new background-->
<h2 class="portal-heading">Registration</h2>
<form name="new_user_form">
Email Address<input type="text" class="form-control register-field highlight-hover" name="email" value="" placeholder="Email Address"><br>
Re-Enter Email Address<input type="text" class="form-control register-field highlight-hover" autocomplete="off" name="email" value="" placeholder="Re-enter Email Address"><br>
First Name<input type="text" class="form-control register-field highlight-hover" autocomplete="given-name" name="firstname" value="" placeholder="First Name"><br>
Last Name<input type="text" class="form-control register-field highlight-hover" autocomplete="family-name" name="lastname" value="" placeholder="Last Name"><br>
Company Name<a href="#" class="help-icon" data-toggle="tooltip" title="Choose your company name. If you do not see it here, please contact ACSI to become an official distributor."><img src="images/help-icon.png"></a>
<select class="form-control register-field highlight-hover" name="company">
<option value="noSelect">Select</option>
<option value="company2">Company 2</option>
</select>
Mobile Phone <a href="#" class="help-icon" data-toggle="tooltip" title="This is used for password recovery only."><img src="images/help-icon.png"></a>
<input type="text" class="form-control register-field highlight-hover" autocomplete="tel" name="mobile" value="" placeholder="0005559999"><br>
Portal User Role <a href="#" class="help-icon" data-toggle="tooltip" title="Portal admins are the administrators for your company."><img src="images/help-icon.png"></a>
<select class="form-control register-field highlight-hover" name="role" id="user-role">
<option value="user">User</option>
<option value="admin">Admin</option>
</select>
<div id="invoices">
Enter two recent invoice totals in USD($)<br>
Invoice 1<input type="text" class="form-control register-field highlight-hover" name="invoice1" value="" placeholder="0.00">
Invoice 2<input type="text" class="form-control register-field highlight-hover" name="invoice2" value="" placeholder="0.00">
</div>
<button class="btn btn-block highlight-hover" id="submit">Submit</button>
</form>
</div>
<div class="col-hidden col-sm col-md col-lg col-xl"> <!--spacing divs-->
</div>
</div>