Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как подменить input:file своим контролом, Попытка подменить browse кнопкой и полем 
:(
    Опции темы
walruz
Дата 26.1.2007, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Здравствуйте!

Нашел в интернете идею, как подменить стандартный контрол input/type=file на простое текстовое поле и кнопку рядом с ним.
Занялся этим, потому что заказчика раздражает "обнуление" стандартоного контрола при перезагрузке страницы.
Слова типа "безопасность" и "стандартное поведение" не помогают.

Приведенный ниже фрагмент кода почти smile работает. 
Но на стороне сервера в реквесте выбранный файл отсутствует.
Если использовать onSubmit, чтобы посмотреть значение browse.value в момент отправки на сервер, то это значение равно пути к выбранному файлу.

Пожалуйста, подскажите, что тут можно поделать??? smile


Код
<html>
<head></head>
<body>
<form name="test_form" method="post" action="test.jsp" onsubmit="alert( browse.value );">
<input type=file name=browse style="display: none;">
<input type=text name=file>
<input type=button onClick="browse.disabled=false;browse.click();file.value=browse.value;browse.disabled=true;" 
      value="Select a File...">        
<br><br>
<!-- must be clicked twice for the form to submit! -->
<input type=submit 
      value="Submit The Form Now!"
      style="font-style:veranda; font-size:12px;">      
</form>
</body>
</html>


Заранее большое спасибо!!!

Это сообщение отредактировал(а) Sardar - 27.1.2007, 00:03
PM MAIL   Вверх
smartov
Дата 26.1.2007, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



walruz, кнопка "Код" делает ваш код читабельным.

Этого мало:
Цитата(walruz @  26.1.2007,  10:58 Найти цитируемый пост)
<form name="test_form" method="post" action="test.jsp" onsubmit="alert( browse.value );">


Надо:
Код

<form enctype="multipart/form-data" 
name="test_form" method="post" action="test.jsp" 
onsubmit="alert( browse.value );">


Как ты раньше файлы грузил, если multipart/form-data не прописал??

И что тебе даст поле с кнопкой? Загрузить файл можно только используя поле типа file.

Это сообщение отредактировал(а) smartov - 26.1.2007, 12:36
PM MAIL   Вверх
walruz
Дата 26.1.2007, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Спасибо за ответ. 

Дело не в enctype="multipart/form-data". Уверяю вас, что это просто не очень удачный пример я выбрал и что в своей программе, которую мне хочется заставить работать, это свойство задано и задано верно.

То что "файл можно загрузить только используя поле типа file", я тоже понимаю.
Как вы видите, это поле в форме присутствует.
Если убрать style="display: none;", то можно будет увидеть все, что происходит с этои полем, как оно заполняется и т.д.

Пожалуйста, посмотрите, вдруг вам удастся разобраться с тем, что происходит.

спасибо!
PM MAIL   Вверх
smartov
Дата 26.1.2007, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



walruz
Цитата(walruz @  26.1.2007,  11:56 Найти цитируемый пост)
Дело не в enctype="multipart/form-data"

Не совсем понимаю. Имеете в виду что в реальном коде form-data есть? Тогда почему не его привели...?

Цитата(walruz @  26.1.2007,  11:56 Найти цитируемый пост)
Если убрать style="display: none;", то можно будет увидеть все, что происходит с этои полем, как оно заполняется и т.д.

Поле типа файл заполнять яваскриптом нельзя. Это несекьюрно и никакой браузер такого не позволит.
PM MAIL   Вверх
walruz
Дата 26.1.2007, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



1) да, enctype="multipart/form-data" в реальном коде присутствует. Почему его нет в примере, который я привел? Потому что я искал решение в интеренете и нашел этот примерчик - маленький и без всего лишнего.  Его автор хотел получать только строку (путь к выбранному файлу), но не сам файл. Вероятно, поэтому он не включил это свойство в свой заголовок. К сожалению, я не обратил на это внимание.

2) в IE6 на странице все выглядит превосходно - поле типа file удается заполнить, перед сабмитом его значение все еще равно пути к выбранному файлу, но почему то на сервер ничего не доходит. Может быть броузер отслеживает, что поле было установленно не вручную пользователем, а с помощью скрипта? И никак его "обмануть" нельзя?

Обратите внимание на onClick="browse.disabled=false;browse.click();file.value=browse.value;browse.disabled=true;" .
Если browse.disabled=false; и browse.disabled=true; убрать, то для сабмита формы потребуется два нажатия на кнопку Submit:
- после первого нажатия поле типа file будет "обнулено"
- только после второго нажатия, форма будет передана на сервер

Есть ли способ это победить???

Спасибо!
PM MAIL   Вверх
smartov
Дата 26.1.2007, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Цитата(walruz @  26.1.2007,  17:46 Найти цитируемый пост)
И никак его "обмануть" нельзя?

Если бы его можно было обмануть любой дурак мог бы стырить у тебя конфиденциальную информацию.
PM MAIL   Вверх
Sardar
Дата 27.1.2007, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Клик на input:file работать будет только в IE.
Глянь сюда для более корректного решения всей задачи, если нужно было просто сделать собственный красивый input:file.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
walruz
Дата 29.1.2007, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Цитата(smartov @ 26.1.2007,  21:17)
Если бы его можно было обмануть любой дурак мог бы стырить у тебя конфиденциальную информацию.

Если вы говорите о моем примере, то это не правда - мы сможем взять только тот файл, который пользователь сам выбрал.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0649 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.