Hello! There is a script that works properly in modern browsers:
var have_active_element = false; var active_element; document.addEventListener("DOMContentLoaded", ajax()); function getXmlHttp() { var ro; try { ro = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { ro = new ActiveXObject("Microsoft.XMLHTTP"); } catch (f) { ro = null; } } if (!ro && typeof(XMLHttpRequest) !== 'undefined') { ro = new XMLHttpRequest(); } return ro; } function ajax() { var xhr = getXmlHttp(); xhr.open('POST', 'index.php'); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.onload = function() { if (xhr.status === 200) { document.getElementById('main-content').innerHTML = xhr.responseText; } else if (xhr.status !== 200) { alert('Request failed. Returned status of ' + xhr.status); } }; xhr.send('mode=ajax'); } function prepare() { ajax(); } function name_valid(current_element) { var value = current_element.value; if (value.search(/^[А-ЯЁ][а-яё]*(\s[А-ЯЁ][а-яё]*)?$/) !== -1) { //Сдаюсь, лучше не могу if(value.length < 30){ send(value, 'name'); current_element.setAttribute('readonly', 'readonly'); have_active_element = false; } else { alert('Введено более 30 символов'); } } else { alert('В имени допустимы только русские символы, без цифр'); return false; } } function age_valid(current_element) { var value = current_element.value; if (value.search(/^\d+$/) !== -1) { if (value < 3 || value > 100) { alert('Некорректные данные'); } else { if(value.length < 3){ send(value, 'age'); current_element.setAttribute('readonly', 'readonly'); have_active_element = false; } } } else { alert('Недопустимые символы'); } } function send(value, name) { var row_id = active_element.parentNode.parentNode.id; row_id = row_id.split('_'); row_id = row_id[1]; var data = name + '=' + value + '&mode=update&row_id=' + row_id; var xhr = getXmlHttp(); xhr.open('POST', 'index.php'); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.onload = function() { if (xhr.status === 200) { active_element.setAttribute('value', xhr.responseText); alert('Данные успешно обновлены'); } else if (xhr.status !== 200) { alert('Request failed. Returned status of ' + xhr.status); } }; xhr.send(data); } function save_city(value) { var row_id = active_element.parentNode.parentNode.id; row_id = row_id.split('_'); row_id = row_id[1]; var data = 'mode=update&row_id=' + row_id + '&city=' + value; xhr = getXmlHttp(); xhr.open('POST', 'index.php'); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.onload = function() { if (xhr.status === 200) { //do something } else if (xhr.status !== 200) { alert('Request failed. Returned status of ' + xhr.status); } }; xhr.send(data); } function show_select(current_element){ if(have_active_element){ alert('Завершите редактирование предыдущего элемента'); return; } var parent = current_element.parentElement; var select = generate_select(true); active_element = select; active_element_value = current_element.value; current_element.remove(); parent.appendChild(select); have_active_element = true; } function hide_select(current_element, value, name){ var parent = active_element.parentNode; var input = generate_input(name); save_city(value); current_element.remove(); parent.appendChild(input); have_active_element = false; active_element=''; } function generate_select(mode) { var select = document.createElement('select'); select.setAttribute('name', 'city_id'); var option = document.createElement('option'); option.text = ' '; select.appendChild(option); if (mode) select.setAttribute('onChange', 'hide_select(this, this.options[selectedIndex].value, this.options[selectedIndex].text)'); for (var i = 0; i < city_names.length; i++) { var option = document.createElement('option'); option.innerHTML = city_keys[i]; option.setAttribute('value', city_names[i]); select.appendChild(option); } var option = document.createElement('option'); option.text = 'Не выбрано'; option.setAttribute('value', 'NULL'); select.appendChild(option); return select; } function change_state(current_element){ if(have_active_element){ alert('Завершите редактирование предыдущего элемента'); return; } current_element.removeAttribute('readonly'); have_active_element = true; active_element = current_element; } function generate_input(value){ var input = document.createElement('input'); input.setAttribute('value', value); input.setAttribute('readonly', 'readonly'); input.setAttribute('onclick', 'show_select(this)'); return input; } function validate(element){ console.log('invoked validate') var form = document.forms.add_user; var name = form[0].value; var age = form[1].value; var city_id = form[2].options[form[2].selectedIndex].value; var valid = true; if (name.search(/^[А-ЯЁ][а-яё]*(\s[А-ЯЁ][а-яё]*)?$/u) != -1) { if(name.length > 30){ alert('Введено более 30 символов'); valid = false; } } else { alert('В имени допустимы только русские символы, без цифр'); valid = false; } if (age.search(/^\d+$/) != -1 && valid) { if (age < 3 || age > 100) { valid = false; alert('Возраст не может быть меньше 3 и больше 100'); } else { if(age.length < 3){ valid = true; } } } else { alert('Недопустимые символы'); valid = false; } if(valid){ return true; } else { return false; } }
I can’t make it work at all in any way in IE9 browser. How are sites on IE debugged? The host is located at this address.