Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Клонирование объектов на javascript (https://javascript.ru/forum/misc/45318-klonirovanie-obektov-na-javascript.html)

olegua 23.02.2014 18:35

Клонирование объектов на javascript
 
адача следующая:

Есть div блок. В нем содержится некие данные. Например, несколько полей, чекбокс текст и т.д., а также в блоке есть 2 кнопки "+" и "-"

Пользователь ввел данные затем нажимает + появляется такой же блок, но пустой.

нашел вот что примерно мне нужно (только в новом блоке поля со значениями, а должны быть пустыми):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Демонстрация клонирования</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
</head>
<body>
<script>
function droptr(btn){
        if(document.getElementById) {
                tr = btn;
                while (tr.tagName != 'TR') tr = tr.parentNode;
                tr.parentNode.removeChild(tr);
                checkForLast();
        }
}
function addtr(btn){
        if(document.getElementById) {
                tr = btn;
                while (tr.tagName != 'TR') tr = tr.parentNode;
                var idSuffix = Math.round(Math.random()*1000);
                var newTr = tr.parentNode.insertBefore(tr.cloneNode(true),tr.nextSibling);
                thisChilds = newTr.getElementsByTagName('td');

                checkForLast();
        }
}
function checkForLast(){
        btns = document.getElementsByName('drop');
        for (i = 0; i < btns.length; i++){
                btns[i].disabled = (btns.length == 1) ? true : false;
        }
}
</script>

    <form action="" method="post">
<table>
<tr>
<td><input type="text" name="nameclone[]"></td>
<td>
<INPUT onclick=droptr(this); type=button  disabled=true value="-" name=drop> <INPUT onclick=addtr(this); type=button value="+">
</td>
</tr>

</table>

        <input type="submit" value="Отправить">
    </form>

</body>
</html>

В общем, нужно сделать так чтобы поля пустыми новые были и желательно избавиться от табличной верстки, т.е. сделать все на div, а не на tr.

Пробовал с нуля написать:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Демонстрация клонирования</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
</head>
<body>

    <form action="" method="post">

<div id="lib"><input  type="text" size="6" name="nameclone[]" value=""><br>
</div>
<div id="lib2"></div>
  <input type="button" value="Add" onClick="if(lb)lb.innerHTML+=text2add">
<script>
 var lb=document.getElementById('lib')
var text2add=lb.innerHTML
function cloneIt(){
        lb.innerHTML=cloneNode(text2add);
       // text2add=text2add.search(/([\w\W]*name=[^\d]+)(\d+)([\w\W]*)/gi)
      //  text2add=RegExp.$1+(1+parseInt(RegExp.$2))+RegExp.$3
       // lb.innerHTML+=text2add
        }
</script>
        <input type="submit" value="Отправить">
    </form>

</body>
</html>


Но в js не силен и скрипт не правильно работает, все поля пустые, даже те что заполнены были стают, да и кнопку только одну вывел.

Помогите плиз.

danik.js 23.02.2014 19:23

Цитата:

Сообщение от olegua
Но в js не силен и скрипт не правильно работает, все поля пустые, даже те что заполнены были стают, да и кнопку только одну вывел.

Что-то я не вижу использовования в твоем коде кода из первого примера... Смотрим в книгу - видим фигу?

olegua 23.02.2014 20:01

Ну, так если бы понимал как работает все то пример бы содержал тот код. Я не знаю, как обращаться к объектам, вот и с нуля писал по другим примерам.

danik.js 23.02.2014 20:43

Цитата:

Сообщение от olegua
писал по другим примерам

Пиши не по другим, а по этому примеру ))

olegua 23.02.2014 21:33

а хоть по этому можете помочь сделать очистку полей в клонированном блоке?

danik.js 24.02.2014 05:59

Цитата:

Сообщение от olegua
а хоть по этому можете помочь сделать очистку полей в клонированном блоке?

А ты создавай клон сразу после загрузки страницы, когда поля еще пустые. И потом добавляй клон клона когда нужно.
Цитата:

Сообщение от olegua
charset=ISO-8859-1

К проблеме не относится, но че за древняя кодировка? Используй UTF-8.
А доктайп юзай <!DOCTYPE html>, и атрибут xmlns не нужен.
Иначе если уж пишешь в XHTML, то теги и атрибуты должны быть в нижнем регистре.


Часовой пояс GMT +3, время: 05:05.