Руслан Савенок
530 сообщений
#15 лет назад
Задача состоит в том что нужно клонировать поле ввода input но заменив в нем один параметр. Как это сделать лучше всего?

Есть ли способ сделать универсальный код для клонирования и следующей замены атрибутов клона?
Роман Беляев
16382 сообщения
#15 лет назад
Как-то не очень понятно... ну клонировать, ну изменить потом у клона атрибут и вставить куда надо его... задача то в чем?
Игорь Ф.
15 сообщений
#15 лет назад
Странный вопрос. Конечно лучше клонировать. Мне вот интересно, что вы прочитали перед тем как задать вопрос?
Максим Ф.
3195 сообщений
#15 лет назад
Клонирование запрещено у нас вроде бы...
Роман Беляев
16382 сообщения
#15 лет назад
AlekartRu, то тока людей..
Артем Л.
11416 сообщений
#15 лет назад
Цитата ("AlekartRu"):
Клонирование запрещено у нас вроде бы...

Ахахаха! Супер! Срубило наповал )))
Данила К.
22 сообщения
#15 лет назад
Ну, смотри.
У тебя поле
<input type="text" name="pole1" id="pole1">


Соответственно, скрипт должен получить id поля и т.д.

<form name="form1" id="form1" action="" method="post">
<input type="text" name="pole1" id="pole1"><br>

</form>


<button onclick="test('pole1','pole2','pole2')">111</button>
<script>
function test(src,nevId,nevName){
var form1=document.getElementById("form1")

var source=document.getElementById(src)


var clone = document.createElement('input')
clone.type = source.type
clone.name = nevName
clone.id = nevId

form1.appendChild(clone)

var mybr = document.createElement('br') //это чтобы был перенос строки
form1.appendChild(mybr)

}

</script>


Дальше сам разберешься?
Игорь Ф.
15 сообщений
#15 лет назад
А еще лучше почитать

Руслан Савенок
530 сообщений
#15 лет назад
Я до этого никогда не работал с клонированием элементов, в скрипте используется jquery. Пробовал использовать clone() метод но что то не выходит.

Я думаю вы поймете почему не выходит клонировать взглянув на это. Клонирую в строке 16
    $('.shvalue').each(function () {        
var defvalue = this.defaultValue;

if ($(this).attr('type') !== 'password') {
$(this).focus(function () {
if (this.value == defvalue) {
this.value = '';
}
});
$(this).blur(function () {
if (this.value == '') {
this.value = defvalue;
}
});
} else {
$(this).addClass('shv-iid').hide().val('').before('<input id=\'' +this.id+ '\' class=\'shv-password-to-text\' type=\'text\' value=\''+defvalue+'\'/>');
$('.shv-password-to-text').focus(function () {
if (this.value == defvalue) {
$(this).hide();
$('.shv-iid').show().focus();
}
});
$(this).blur(function () {
if (this.value == '') {
$(this).hide();
$('.shv-password-to-text').show();
}
});
}
Руслан Савенок
530 сообщений
#15 лет назад
Цитата ("man777"):
Дальше сам разберешься?
В вашем я то разобрался похоже делал, но мне почему то не нравится такой вариант =)
Данила К.
22 сообщения
#15 лет назад
Цитата:
А еще лучше почитать

Можно и так, я лишь навскидку по памяти привел первый попавшийся вариант.
Если честно, про cloneNode просто забыл.
Цитата ("zombieman"):
Я думаю вы поймете почему не выходит клонировать взглянув на это. Клонирую в строке 16
 $(this).addClass('shv-iid').hide().val('').before('<input id=\'' +this.id+ '\' class=\'shv-password-to-text\' type=\'text\' value=\''+defvalue+'\'/>');


Что-то я не уверен, что клонирование делается именно так. Какие ошибки (в частности, 16 строки) выдает отладчик браузера?
Руслан Савенок
530 сообщений
#15 лет назад
Цитата ("man777"):
Что-то я не уверен, что клонирование делается именно так. Какие ошибки (в частности, 16 строки) выдает отладчик браузера?
абсолютно никаких, но jquery жалуется если к этому befory добавить переменную опр. класса, по этому я хочу как то сделать абсолютно точно такую форму, и потом уже ей менять параметры.

Или еще проще вариант как то кроссбраузерно менять тип поля =)
Данила К.
22 сообщения
#15 лет назад
Цитата ("zombieman"):
В вашем я то разобрался похоже делал, но мне почему то не нравится такой вариант =)


Можешь заюзать cloneNode

<script>
function test(src,nevId,nevName){
var form1=document.getElementById("form1")

var source=document.getElementById(src)


var clone =source.cloneNode(true);

clone.name = nevName
clone.id = nevId

form1.appendChild(clone)

var mybr = document.createElement('br') //это чтобы был перенос строки
form1.appendChild(mybr)

}

</script>


Если я опять ничего не путаю.
З.Ы. А чем не нравится мой вариант? Не универсальный?
Руслан Савенок
530 сообщений
#15 лет назад
Цитата ("man777"):
З.Ы. А чем не нравится мой вариант? Не универсальный?

Запутано как то, решил погуглить на счет кроссбраузерной смены типа с text на password мб. таки сделаю без клонирования. Но .type при смене в ИЕ дает ошибку
Андрей К.
1172 сообщения
#15 лет назад
Цитата ("zombieman"):
Запутано как то

Во-первых не запутано, а во-вторых нет ничего более кроссбраузерного, чем работа напрямую с DOM. +1 за вариант man777.
Руслан Савенок
530 сообщений
#15 лет назад
Цитата ("Lisio"):
Во-первых не запутано, а во-вторых нет ничего более кроссбраузерного, чем работа напрямую с DOM. +1 за вариант man777.

type это тоже параметр DOM но он не меняется кроссбраузерно)
Данила К.
22 сообщения
#15 лет назад
К сожалению, я на кроссбраузерность его не проверял.
Тысячу извинений.
Андрей К.
1172 сообщения
#15 лет назад
Цитата ("zombieman"):
type это тоже параметр DOM но он не меняется кроссбраузерно)

Я говорю не про параметры элементов DOM, а про стуктуру DOM. На изменение структуры ограничения не накладываются, пример приведенный man777 - наиболее правильный и кроссбраузерный, если конечно не забыть проставить за ним десяток точек с запятой.
Руслан Савенок
530 сообщений
#15 лет назад
Сейчас докачаю ие тестер и попробую так:

this.setAttribute('type','password');
Данила К.
22 сообщения
#15 лет назад
Цитата ("Lisio"):
Цитата ("zombieman"):
type это тоже параметр DOM но он не меняется кроссбраузерно)

Я говорю не про параметры элементов DOM, а про стуктуру DOM. На изменение структуры ограничения не накладываются, пример приведенный man777 - наиболее правильный и кроссбраузерный, если конечно не забыть проставить за ним десяток точек с запятой.


Да я как-то уже привык, что перенос строки для JS считается концом команды. Правда, в AS по привычке точки с запятой ставлю, уже по-другому никак.