Почему введённые в поле данные исчезают при добавлении такого же нового поля?
Всем привет!
Если в приведённом примере выбрать файл, а затем нажать на "Добавить поля", то при добавлении нового поля уже введённые данные исчезают. Что неправильно? Подскажите, пожалуйста. <!doctype html> <html> <head> <script type="text/javascript"> function addField() { document.getElementById("file2upload").innerHTML += '<br><input type="file" multiple="multiple" name="upload_file" size="50" value="">'; } </script> <title>Title</title> </head> <body> <form method="post" action="/upload.cgi" enctype="multipart/form-data"> Загрузить файл: <div id="file2upload"><input type="file" multiple="multiple" name="upload_file" size="50" value=""></div> <br><a href="#" onClick="addField(); return false;">Добавить поля</a> <input type="submit" name="abc" value="Загрузить"></form> </body> </html> |
Цитата:
Что происходит при изменении этого свойства: 1) Содержимое элемента полностью очищается. Все заполненные инпуты при этом исчезают. 2) Парсер парсит новый HTML и из него создает инпуты и все прочее. Используй appendChild() или insertAdjacentHTML |
<!DOCTYPE html> <html> <head> <meta charset='utf-8'> <script type="text/javascript"> function addField() { document.getElementById("file2upload").insertAdjacentHTML('afterend','<input type="file" multiple="multiple" name="upload_file" size="50" value=""><br>'); } </script> <title>Title</title> </head> <body> <form method="post" action="/upload.cgi" enctype="multipart/form-data"> Загрузить файл: <div id="file2upload"><input type="file" multiple="multiple" name="upload_file" size="50" value=""></div> <br><a href="#" onClick="addField(); return false;">Добавить поля</a> <input type="submit" name="abc" value="Загрузить"></form> </body> </html> |
danik.js, спасибо за участие, но с appendChild() у меня почему-то не получилось. :(
DeV1doR, большое спасибо! Всё работает! Только я заменил 'afterend' на 'beforeEnd' и теперь все поля добавляются в конец списка. Странно, что insertAdjacentHTML я не нашел в "JavaScript Подробное руководство", Дэвид Флэнаган, 5-е издание. Тем не менее вопрос решён, ещё раз спасибо! |
javascript_pupil,
Да, так пожалуй правильней будет, прошляпил. Сам учусь) |
Цитата:
<!DOCTYPE html> <html> <head> <meta charset='utf-8'> <script type="text/javascript"> function addField() { var fieldset = document.getElementById("file2upload"); var firstField = fieldset.querySelector('.field'); var clonedField = firstField.cloneNode(true); clonedField.value = ''; fieldset.appendChild(clonedField); } </script> <title>Title</title> </head> <body> <form method="post" action="/upload.cgi" enctype="multipart/form-data"> Загрузить файл: <div id="file2upload"> <div class="field"> <input type="file" multiple="multiple" name="upload_file" size="50" /> </div> </div> <br><a href="#" onClick="addField(); return false;">Добавить поля</a> <input type="submit" name="abc" value="Загрузить"></form> </body> </html> При клонировании инпута его value также сохраняется. Поэтому нужно очистить .value, но тут проблемка - старые IE не дают менять value на файловых инпутах. Но тут можно что-нибудь придумать. |
danik.js, да, круто. Оказывается есть несколько решений и у каждого свои плюсы.
|
Часовой пояс GMT +3, время: 20:54. |