Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Что-то не так делаю с clone() (https://javascript.ru/forum/misc/34251-chto-ne-tak-delayu-s-clone.html)

tiho 26.12.2012 15:44

Что-то не так делаю с clone()
 
Здравствуйте.

Делаю добавление полей inputов при на жатии на кнопку. Вот ф-я добавления:

function add_elem()
{
	$('.element').last().clone().appendTo($('#container_elements')).hide().show(400);
}


Почему то всеравно в копии сохраняется значения предыдущего поля, хоть никаких аргументов в clone нет. Пробывал по разному, и false ставил в аргументы, и false,false

Спасибо.

Deff 26.12.2012 15:53

tiho,
Приведите минимальный HTML код для данного примера

skfyann 26.12.2012 16:00

Ну так это нормальное поведение для clone, разве нет?

The .clone() method performs a deep copy of the set of matched elements, meaning that it copies the matched elements as well as all of their descendant elements and text nodes.

tiho 26.12.2012 16:05

...
<script type="text/javascript">

function add_elem()
{
	$('.element').last().clone().appendTo($('#container_elem')).hide().show(400);
}

</script>

...

<div id="container_elem">
	<div id="element" class="element" >
		<input type="text" placeholder="Введите, за что расходы" name="input_za_chto" />
		<input type="text" placeholder="Введите сумму расхода или процент" name="input_summa" class="input_summa" />
	</div>
</div>

<span onclick="add_elem()">+ Добавить расход</span>

tiho 26.12.2012 16:07

Цитата:

Сообщение от skfyann
Ну так это нормальное поведение для clone, разве нет?

Незнаю точно:) если это нормальное, то как сделать "ненормальное"? Чтобы копировались элементы без их содержимого

Deff 26.12.2012 16:08

Цитата:

Сообщение от tiho
Почему то всеравно в копии сохраняется значения предыдущего поля, хоть никаких аргументов в clone нет. Пробывал по разному, и false ставил в аргументы, и false,false

Опишите нужную логику добавления элемента по клику
Цитата:

Сообщение от tiho
Чтобы копировались элементы без их содержимого

Что подразумевается под содержимым
Приведите вид исходного input и преобразованно-копируемого

tiho 26.12.2012 16:11

Просто нужно чтобы элемент добавлялся после последнего такогоже в дереве, с пустыми полями.

Deff 26.12.2012 16:13

Цитата:

Сообщение от tiho
Просто нужно чтобы элемент добавлялся после последнего такогоже в дереве, с пустыми полями.

Приведите HTML вид исходного input и преобразованно-копируемого

tiho 26.12.2012 16:17

2 однотипных инпута:

<input type="text" placeholder="Введите сумму расхода или процент" name="input_summa" class="input_summa" />

его копия - точно такая же (смотрел через хромовский дебагер)

Deff 26.12.2012 16:19

Цитата:

Сообщение от tiho
его копия - точно такая же (смотрел через хромовский дебагер)

Не что получается - а необходимый Вам вид итоговой копии

tiho 26.12.2012 16:21

такой же, только с пустыми полями инпутов :)

Deff 26.12.2012 16:23

Цитата:

Сообщение от tiho
такой же, только с пустыми полями инпутов

:lol: value="" ?

tiho 26.12.2012 16:30

да! :)

skfyann 26.12.2012 16:42

$('.element').last().clone().val("").appendTo($('#container_elements')).hide().show(400);


Вот так наверно?

tiho 26.12.2012 16:44

skfyann, не, у меня в копии не только инпуты) решил уже вот таким способом:
..... hide().show(400).find("input").val("")


Хотя готов поклясться что несколько действий назад мой код работал без этих find а сразу делал пустую копию. паранормальное явление 5.

skfyann, deff, спасибо за помощь.

skfyann 26.12.2012 16:53

tiho, чистить значения после того как показали пользователю имхо не хорошо.

Deff 26.12.2012 16:56

Цитата:

Сообщение от skfyann
tiho, чистить значения после того как показали пользователю имхо не хорошо.

$('.element').last().clone().hide().val("").appendTo($('#container_elements')).show(400)

tiho 26.12.2012 17:13

skfyann, пользователь то их не увидел. Какая разница когда их чистить в данном случае, если они всеравно сначала создаются, а потом их убирать надо?

skfyann 26.12.2012 17:18

Цитата:

Сообщение от tiho (Сообщение 223639)
skfyann, пользователь то их не увидел.

А вот и увидел. :p
.appendTo($('#container_elements')).hide().show(400).find("input").val("");

Добавить элемент -> спрятать -> показать -> найти все инпуты -> их почистить

Deff 26.12.2012 17:24

Цитата:

Сообщение от skfyann
.appendTo($('#container_elements')).hide().show(40 0).find("input").val("");

var a = $('.element').last().clone().addClass("add").hide();
a.find("input").val("");
a.appendTo($('#container_elements'));
$('#container_elements .add').show(400).removeClass("add")

tiho 26.12.2012 17:26

так ты наверно имеешь ввиду что увидел "браузер"?) потому что на экране ничего появляться не успевает. А в каком порядке чистить - я считаю не важно (дело вкуса) т.к. они наверно все равно память уже заняли сколько им надо, в независимости от того когда их почистили. Поправь меня если не прав.


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