Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Клонирую input через JQ и теряется его value (https://javascript.ru/forum/css-html/27035-kloniruyu-input-cherez-jq-i-teryaetsya-ego-value.html)

Sergey999 31.03.2012 21:36

Клонирую input через JQ и теряется его value
 
Собственно вся проблема в заголовке, код очень простой:

var newInput = jQuery(input).clone(); // input - реальный input=file на странице
alert(input.value);                           // Выдает мне имя загружаемого файла
alert(newInput.attr('value'));             // Уже ничего мне не выдает ((
jQuery(newInput).appendTo(form);     // Ну и дальше ничего не работает т.к. имя файла потеряно...
jQuery(form).appendTo('body');          // form это форма до этого сделанная динамически



Ошибка оказалась именно тут и везде кроме как в FF и Оперы она есть, при клонировании теряю значение, пробовал так:
$('#loadfile').clone().appendTo(form);
jQuery(form).appendTo('body');


То же самое, у копии инпута в форме value уже потерян :help:

T-sh 01.04.2012 03:29

а так?

var newInput = $(input).clone().attr('value', $(input).val());

Pavel M. 01.04.2012 09:32

вроде же нельзя менять value у input type=file по соображениям безопасности

T-sh 01.04.2012 10:25

кстати, да. программно поменять нельзя..

как вариант, клонировать input, а обращаться к оригинальному для получения value

Sergey999 01.04.2012 19:25

Цитата:

как вариант, клонировать input, а обращаться к оригинальному для получения value
Спасиб, так и есть, правда форма у меня отправлялась целиком с этим значением, хм как теперь то передать его :-?

Sergey999 01.04.2012 19:33

Это Ajax загрузчик, основной input на сайте и при загрузке каждого нового файла он клонируется в форму и она отправляется php скрипту, брр по каким то соображениям я тогда именно так сделал

T-sh 01.04.2012 19:57

т.е. при загрузке второго файла у вас ещё раз загрузится первый??? что-то не пойму..

клонируйте пустой input, пользователю всё равно ведь надо выбрать файл)

Sergey999 01.04.2012 21:05

нет нет, в мозилле вхе хорошо, в IE когда клонирую в форму этот инпут и потом передаю форму php скрипту он ничего не получает

jQuery(newInput).appendTo(form);     // Ну и дальше ничего не работает т.к. имя файла потеряно...
jQuery(form).appendTo('body');          // form это форма до этого сделанная динамически
document.forms["jUploadForm"].submit();  // Эту самую форму  динамически сделанную отправляем php скрипту, который обрабатывает $_FILES


Но он ничего не обрабатывает в итоге, т.е. значение value я потерял, а вот понял если я оригинальный input вставлю, то он соответсвенно исчезает со страницы и оказывается в этой невидимой форме, чтобы такого не было я его клонирую... вот как тут переделать чтобы везде работало не очень понятно, разве что брать инпут оригинальный а на страницу всегда новый вставлять, пока ничего другого в голову не приходит.

Цитата:

клонируйте пустой input, пользователю всё равно ведь надо выбрать файл)
Теперь я ничего не понял ^_^

Rootpassword 01.04.2012 21:16

Так почему бы вам оригинальную форму, вместо того, что бы все клонировать(это вряд ли выйдет кроссбраузерно, type=file много чего нету из соображений приватности/безопасности), саму форму не отправлять в фрейм?

Sergey999 02.04.2012 00:02

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

$('#loadfile').appendTo(form);
 // вместо 
$('#loadfile').clone().appendTo(form);


Так работает, тогда буду создавать еще раз input в том месте откуда его убираю, сам input обернуть в <form> не очень удобно т.к. загрузчик по сайту раз 20 используется =(

А можно как то вставить input точно туда где был старый?

inp = jQuery('<input .... />');
// Вставляем его туда где был $('#loadfile') ....


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