Js задачка
530 повідомлень
#15 років тому
Задача состоит в том что нужно клонировать поле ввода input но заменив в нем один параметр. Как это сделать лучше всего?Есть ли способ сделать универсальный код для клонирования и следующей замены атрибутов клона?
16382 повідомлення
#15 років тому
Как-то не очень понятно... ну клонировать, ну изменить потом у клона атрибут и вставить куда надо его... задача то в чем?
15 повідомлень
#15 років тому
Странный вопрос. Конечно лучше клонировать. Мне вот интересно, что вы прочитали перед тем как задать вопрос?
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 повідомлень
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 повідомлення
1172 повідомлення
#15 років тому
Цитата ("zombieman"):type это тоже параметр DOM но он не меняется кроссбраузерно)
Я говорю не про параметры элементов DOM, а про стуктуру DOM. На изменение структуры ограничения не накладываются, пример приведенный man777 - наиболее правильный и кроссбраузерный, если конечно не забыть проставить за ним десяток точек с запятой.
530 повідомлень
22 повідомлення
#15 років тому
Цитата ("Lisio"):Цитата ("zombieman"):type это тоже параметр DOM но он не меняется кроссбраузерно)
Я говорю не про параметры элементов DOM, а про стуктуру DOM. На изменение структуры ограничения не накладываются, пример приведенный man777 - наиболее правильный и кроссбраузерный, если конечно не забыть проставить за ним десяток точек с запятой.
Да я как-то уже привык, что перенос строки для JS считается концом команды. Правда, в AS по привычке точки с запятой ставлю, уже по-другому никак.
