Динамическая обработка формы ооп
Есть форма содержащая:
3 текстовых поля: фамилия, имя / фамилия, отчество текстовые поля: e-mail, password флажки производители группы переключателей цвета оттенки 2 объекта Select: группа товара, название товара. стоимость (при изменении модели) динамический табличный отчет, сумма прописью. ФИО - текст, начинается с большой буквы. Адрес- наличие символа @, пароль - от 8 символов, большие, маленькие буквы, цифры и тому подобное. Текстовые поля должны быть очищены при получении фокуса. Проверять нужно сразу, по событию оnBlur .. Alert не использовать. В зависимости от выбранного элемента первой группы формируются элементы второй(select). Постоянно отображать итоговый результат. Обновляется при изменении текста любого элемента. Вот мне попалось такое задание его нужно сделать масимум в ООП но я сделал больше функционально, но не все корректно работает не обновляется радио кнопки и проверки не полностью правильно работают, а вот вывести это все в таблицу не знаю как сделать вообще, что здесь неправильно помогите пожалуйста. script.js
var Validator = function(form) {
this.form = $(form);
function Callme() {
for (var i in Elements) {
var type = i;
var validation = Elements[i];
switch (type) {
case 'name':
if (!validation.reg.test(validation.selector.val())) {
document.getElementById("name").placeholder = 'Not a valid name.';
}
else {
det1[1] = document.getElementById('name').value + '\n';
var str = det1.join(' ');
//document.getElementById('text').value = str;
}
break;
case 'email':
if (!validation.reg.test(validation.selector.val())) {
document.getElementById("email").placeholder = 'Not a valid e-mail address';
}
else {
det1[7] = document.getElementById('email').value + '\n';
var str = det1.join(' ');
//document.getElementById('text').value = str;
}
break;
case 'surname':
if (!validation.reg.test(validation.selector.val())) {
document.getElementById("surname").placeholder = 'Not a valid surname.';
}
else {
det1[3] = document.getElementById('surname').value + '\n';
var str = det1.join(' ');
}
break;
case 'lastname':
if (!validation.reg.test(validation.selector.val())) {
document.getElementById("lastname").placeholder = 'Not a valid lastname';
}
else {
det1[5] = document.getElementById('lastname').value + '\n';
var str = det1.join(' ');
}
break;
case 'pass':
if (validation.reg.test(validation.selector.val()) || validation.selector.val() == '') {
document.getElementById("pass").placeholder = 'Not a valid password';
}
else {
det1[9] = document.getElementById('pass').value + '\n';
var str = det1.join(' ');
}
break;
default:
break;
}
}
e.preventDefault();
}
$(function() {
var callme;
$('#onblur-callme input')
.focus(function() {
callme = false;
})
.blur(function() {
callme = true;
setTimeout(function() {
if (callme) {
Callme();
}
}, 1);
});
});
var Elements = {
name: {
selector: $('#name'),
reg: /^[a-zA-Z]{2,20}$/
},
surname: {
selector: $('#surname'),
reg: /^[a-zA-Z]{2,20}$/
},
lastname: {
selector: $('#lastname'),
reg: /^[a-zA-Z]{2,20}$/
},
email: {
selector: $('#email'),
reg: /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
},
pass: {
selector: $('#pass'),
reg: /^[a-zA-Z]{2,20}$/
}
};
var handleError = function(element, message) {
element.addClass('input-error');
var $li = element.parent('li');
var error = $('<div class="error"></div>').text(message);
error.appendTo($li);
element.keyup(function() {
$(error).fadeOut(1000, function() {
element.removeClass('input-error');
});
});
};
};
var aHouseValues = ["WDS.150,DW.30,D.342", "F1.50,Dc1.300", "FDS1.500,5DD.150", "D1.300", "D1.550,D123.1000,CVD.1500,FG1.2500,DWR23.900"];
function getHouseValuesByStreet(index){
var sHouseValues = aHouseValues[index];
return sHouseValues.split(",");
}
function MkHouseValues(index){
var aCurrHouseValues = getHouseValuesByStreet(index);
var nCurrHouseValuesCnt = aCurrHouseValues.length;
var oHouseList = document.forms["form1"].elements["model"];
var oHouseListOptionsCnt = oHouseList.options.length;
oHouseList.length = 0;
for (i = 0; i < nCurrHouseValuesCnt; i++){
if (document.createElement){
var newHouseListOption = document.createElement("OPTION");
newHouseListOption.text = aCurrHouseValues[i];
newHouseListOption.value = aCurrHouseValues[i];
(oHouseList.options.add) ? oHouseList.options.add(newHouseListOption) : oHouseList.add(newHouseListOption, null);
}else{
oHouseList.options[i] = new Option(aCurrHouseValues[i], aCurrHouseValues[i], false, false);
}
}
}
MkHouseValues(document.forms["form1"].elements["mark"].selectedIndex);
var validator = new Validator('#test');
validator.validate();
det1 = ["Name: "," ","Surname: "," ","Lastname: "," ","Email: "," ","Password: "," ","Color: "," ","Shade: "," ","Producer: "," ","Brand: "," ","Model: "," ","Cof.Colour"," ","Price"," "];
mas = [["Blue-black","Blue-yellow","Blue-red",[0.3]],["Red and yellow","Red green","Red and black",[0.05]],["Yellow and white","Yellow-blue","Yellow-black"],[0.9]];
var buttons = document.getElementsByName("radio1");
length_m = mas.length;
function setRadio(event) {
var options = document.getElementsByName("radio1");
var options2 = document.getElementsByName("radio2");
if (options) {
for (var i = 0; i < options.length; i++) {
if (options[i].checked){
o = options[i].value;
document.getElementById('lb1').innerHTML= mas[i][0];
document.getElementById('lb2').innerHTML= mas[i][1];
document.getElementById('lb3').innerHTML= mas[i][2];
options2[0].value = mas[i][0];
options2[1].value = mas[i][1];
options2[2].value = mas[i][2];
k = i;
}
}
}
det1[11] = event.target.value+ '\n';
var str = det1.join(' ');
//document.getElementById('text').value = str;
cof = parseFloat(mas[k][3]);
det1[21] = mas[k][3] +'\n';
}
for (var i = 0; i < buttons.length; i++)
buttons[i].addEventListener("change", setRadio);
var buttons2 = document.getElementsByName("radio2");
function setRadio2(event) {
det1[13] = event.target.value.split(',')+'\n';
var str = det1.join(' ');
document.getElementById('text').value = str;
}
for (var i = 0; i < buttons.length; i++)
buttons2[i].addEventListener("change", setRadio2);
function run1() {
det1[15] = document.getElementById("select1").value+ '\n';
var str = det1.join(' ');
document.getElementById('text').value = str;
}
function run2() {
det1[17] = document.getElementById("select2").value.split('.')[0]+ '\n';
var str = det1.join(' ');
document.getElementById('text').value = str;
price = document.getElementById("select2").value.split('.');
det1[23] = (parseInt(price[1]))*cof;
}
function checks() {
var cbx = document.getElementById("flags").getElementsByTagName("input"), mas = [];
for (i=0; i < cbx.length; i++) {
if (cbx[i].type === "checkbox" && cbx[i].checked) {
mas.push(cbx[i].value);
}
}
det1[15] = mas + '\n';
var str = color.join(' ');
document.getElementById('text').value = str;
};
|
разметка формы:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id = "onblur-callme">
<form action="#" method="post" id="test" name="form1">
<fieldset>
<legend>Contact information</legend>
<table>
<tr>
<td>
<td>
<li>
<label for="name">Name:</label>
<input type="text" name="name" id="name" />
</li>
<li>
<label for="name">Surname:</label>
<input type="text" name="surname" id="surname" />
</li>
<li>
<label for="name">Lastname</label>
<input type="text" name="lastname" id="lastname" />
</li>
</td>
<td>
<li>
<label for="email">Email:</label>
<input type="text" name="email" id="email" />
</li>
<li>
<label for="pass">Password:</label>
<input type="text" name="pass" id="pass" />
</li>
</td>
</ul>
</tr>
</table>
<p><input type="submit" name="send" id="send" value="Send" /></p>
</fieldset>
<br>
<table>
<tr>
<td>
<fieldset>
<div id = "flags" onchange="checks()">
<legend>Producer</legend>
<li>
<input type="checkbox" name = "checkbox1" id = "check1" value="Volswagen"> Volswagen
</li>
<li>
<input type="checkbox" name = "checkbox1" id = "check2" value="Hyundai">Hyundai
</li>
<li>
<input type="checkbox" name = "checkbox1" id = "check3" value="Vaz"> Vaz
</li>
<li>
<input type="checkbox" name = "checkbox1" id = "check4" value="Zaz"> Zaz
</li>
<li>
<input type="checkbox" name = "checkbox1" id = "check5" value="Tesla"> Tesla
</li>
</div>
</fieldset>
</td>
<td>
<fieldset>
<legend>Color Tint</legend>
<li>
<input type="radio" name = "radio1" value="Blue"> Blue
</li>
<li>
<input type="radio" name = "radio1" value="Red"> Red
</li>
<li>
<input type="radio" name = "radio1" value="White"> White
</li>
<br>
<li>
<input type="radio" name = "radio2" value=" "> <label id = "lb1"></label>
</li>
<li>
<input type="radio" name = "radio2" value=""> <label id = "lb2"></label>
</li>
<li>
<input type="radio" name = "radio2" value=""> <label id = "lb3"></label>
</li>
</fieldset>
</td>
<td>
<fieldset>
<legend>Brand Model</legend>
<select name="mark" onChange="MkHouseValues(this.selectedIndex)" onclick="run1()">
<option value="Qwer">Qwer</option>
<option value="Cvwa">Cvwa</option>
<option value="Vwqqs">Vwqqs</option>
<option value="Vqs">Vqs</option>
<option value="Jed">Jed</option>
</select>
<select name="model" onclick="run2()">
<option value="N/A"></option>
</select>
</fieldset>
</td>
</tr>
</table>
</form>
</div>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="script.js"></script>
</body>
</html>
|
| Часовой пояс GMT +3, время: 19:01. |