Вопросы по JavaScript

34.14K
.

Мне снова нужна ваша помощь...
У меня есть разворачивающие динамически списки, скрины будут...
Например, нужно добавить в этот список какое-то поле.
Если делать это без обновления странички, то данные добавляются, но на страничке не появляются, причиною тому становится то, что страничка не перезагружается. Если перезагружать страничку, то списки сворачиваются :-(
Сохранить позиции раскрытых строк не вариант... их может быть много и может быть несколько уровней вложений. Как реализовать добавление без перезагрузки, но с частичной догрузкой странички, без свертывания подуровней? Или изменение.. Тоже самое.. Оно меняется, но после перезагрузки, но тут проще.. В поле вывода подставить нужное нам id, которое после успешного изменения обновить средствами jquery.
JQuery

Код (+/-)

<script>
    function AjaxFormRequest(result_id,formMain,url) {
        jQuery.ajax({
            url:     url,
            type:     "POST",
            dataType: "html",
            data: jQuery("#"+formMain).serialize(),
            success: function(response) {
                document.getElementById(result_id).innerHTML = response;
            },
            error: function(response) {
                document.getElementById(result_id).innerHTML = "<p>Виникла помилка при додавані типу, спробуйте пізніше!</p>";
            }
        });

        $(':input','#formMain')
            .not(':button, :submit, :reset, :hidden')
            .val('')
            .removeAttr('checked')
            .removeAttr('selected');
    }
</script>


HTML
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title></title>
<meta name="description" content=""/>
<meta name="Keywords" content=""/>
<link href="css/style.css" type="text/css" rel="stylesheet"/>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<div class="wrapper">
   <div class="form">
    <div id="messegeResult">
        <p> Оставьте ваши контакты и наш консультант свяжется с вами </p>
    </div>
       <div id="messegeResult2">
           <p> Оставьте ваши контакты и наш консультант свяжется с вами </p>
       </div>

       <form method="post" action="" id="formMain" name="formMain">
        <input id="name" type="text" name="name" placeholder="Введите ваше имя" maxlength="30" autocomplete="off" required/>
        <input id="telephone" type="Tel" name="telephone" placeholder="Введите ваш телефон" maxlength="30" autocomplete="off" required/>
        <input id="button" type="button"  value="Заказать обратный звонок" onclick="AjaxFormRequest('messegeResult', 'formMain', 'index.php/types2')"/>
    </form>



       <form method="post" action="" id="formMain2" name="formMain">
           <input id="name_last" type="text" name="name_last" placeholder="Введите ваше имя" maxlength="30" autocomplete="off" required/>
           <input id="telephone_last" type="Tel" name="telephone" placeholder="Введите ваш телефон" maxlength="30" autocomplete="off" required/>
           <input id="button_last" type="button"  value="Заказать обратный звонок" onclick="AjaxFormRequest('messegeResult', 'formMain2', 'index.php/types2')"/>
       </form>

   </div>
</div>

</body>
</html>



Изменить еще как-то понятно... поле обновить на страничке и норм, ну вот что делать с добавлением и удалением, если за один заход без перезагрузки может быть десяток изменений, добавление и удаление.
Прикрепленные файлы:
.
(\/)____o_O____(\/)

UJIN, где то дома было, если найду дам

.
(\/)____o_O____(\/)

UJIN, похоже не найду, там не сложно, я переделывал добавление поля при загрузке файлов, нагуглить не сложно

.

оно то может и не сложно
в принципе я представляю логику того, как доставать, но знаний в java script"е никаких и пока ничего так и не получилось
главная задача, как понимаю, сохранить положение на странице и сохранить состояние открытых списков структуры
пока в голову приходит сохранение в сессиях или в get еще можно

.
Think different

UJIN, Верстку покажи. Блока, который нужно добавить и контейнера, в который добавлять.

.

точно! что если обновлять тот блок, в который нужно добавлять :-)
должно заработать...

.

не получается у мну :-(
оформить по-другому придумал как
но скажем.. есть форма

<form id="myFormAdd">
<div class="modal-body">
<div class="input-group">
<div style="width: 30%" class="input-group-addon">Посада</div>
<input type="text" name="number" class="form-control  input-sm" id="exampleInputAmount" placeholder="Введіть посада">
</div>
<div class="input-group">
<div style="width: 30%" class="input-group-addon">Прізвище</div>
<input type="text" name="number" class="form-control  input-sm" id="exampleInputAmount" placeholder="Введіть прізвище">
</div>
<div class="input-group">
<div style="width: 30%" class="input-group-addon">Ім'я</div>
<input type="text" name="number" class="form-control  input-sm" id="exampleInputAmount" placeholder="Введіть ім'я">
</div>
<div id="myTab" style="padding: 6px" class="btn-group btn-group-justified" role="group" aria-label="...">
<div class="btn-group right" role="group">
<button type="submit" name="submit" class="btn btn-primary">Додати співробітника</button>
</div>
</div>
<hr/>
<div id="workers"></div> // блок для заполнения 
</div>
<hr/>
<div id="myTab" style="padding: 6px" class="btn-group btn-group-justified" role="group" aria-label="...">
<input type="submit" class="btn btn-info" onclick="show_messages()" value="Закрити">
</div>
</form>
.
(\/)____o_O____(\/)

UJIN, <form method="post" action="" id="formMain" name="formMain">
<input id="name" type="text" name="name" placeholder="Введите ваше имя" maxlength="30" autocomplete="off" required/>

<input id="telephone" type="Tel" name="telephone[]" placeholder="Введите ваш телефон" maxlength="30" autocomplete="off" required/>
// сюда подгружать инпуты name="telephone[]"
<input id="button" type="button" value="Заказать обратный звонок" onclick="AjaxFormRequest('messegeResult', 'formMain', 'index.php/types2')"/>
</form>

.
Blade
The Frontend-Warrior

хм, уже устал искать ошибку. есть следующий код

<ul class="menu">
    <li><a href="#">Главная</a></li>
    <li><a href="#">Галарея</a></li>
    <li><a href="#">Статьи</a></li>
    <li><a href="#">Гостевая книга</a></li>
</ul>

<script>
if(window.history.length > 0){
    var menu  = document.getElementsByClassName('menu');
    console.log(menu);
    menu.appendChild(
        document.createTextNode(
            '<li><a onclick="window.history.go(-1);">Назад</a></li>'
        ));
</script>


Но новый элемент не добавляется. Выводится ошибка
menu.appendChild is not a function
В чем у меня ошибка? Я уже кучу вариантов перепробовал, оборачивал в функцию и вешал на body onload .. Не работает
Был ещё такой вариант
<script>
    if(window.history.length > 0){
        var li = document.createElement('li');
        li.innerHTML = '<a onclick="window.history.go(-1);">Назад</a>';
        var menu  = document.getElementsByClassName('menu');
        menu.appendChild(li);
    }
</script>
.

попробуй

menu[0].appendChild(
        document.createTextNode(
            '<li><a onclick="window.history.go(-1);">Назад</a></li>'
        ));
Всего: 820