Evanre
@Evanre
Front-end developer

Как с помощью jQuery реализовать клик по input[type="file"]?

Необходимо стилизовать кнопку выбора файла. В макете не предусматривается поля с именем файла. т.е. мне просто нужно сделать красивую кнопку, клик по которой будет открывать окно выбора файла.
В интеренете полно всяких плагинов и прочей мути. Но почему я не могу скрыть нативный input и сделать элементарный клик по любому html элементу который можно реализовать как кнопкку? например label'у? Я сперва так и попробовал, но работает оно почему то криво: я кликаю по label'у, открывается окно выбора файла, я выбираю, жму "выбрать", окно закрывается и открывается опять снова, выбираю еще раз и только тогда все проходит, т.е. каждый раз вылетает окно 2 раза.
Почему данная конструкция работает криво?

<label for="file-input" id="file-input-label">добавить изображение</label>
	<input type="file" id="file-input" accept="image/jpeg,image/png,image/gif">

$("#file-input-label").click(function(){
	$("#file-input").click();
})


РЕШЕНИЕ: Разобрался в чем была беда: я кликал по лейблу, который уже был подвязан на инпут. т.е. срабатывал клик через jquery и еще один, нативный через label for="".
Так что можно делать это хоть через jquery, хоть через label for="". И так и так будет работать. Всем большое спасибо.
  • Вопрос задан
  • 2704 просмотра
Решения вопроса 1
Js в данном случае совсем не нужен, если input вложен в label, то при клике по label - input поймает фокус, в случает с input[type=file] - откроется. Сам input можете сделать display:none; если он вам не нужен.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
DeLaVega
@DeLaVega
Верстаю, фронтэндю =)
Давайте я вам предложу альтернативу без скриптов.

Делаете некий див. Стилизуете его как вам нужно. Даёте ему position: relative; overflow: hidden. Внутрь него кладете input и ставите ему position: absolute и задаете ему ширину и высоту под размер вашей кнопки, и после это магия - ставите ему opacity: 0 =) Работает как часы.
Ответ написан
atnartur
@atnartur
Веб-разработчик
Я делаю обычно просто див, ловлю клик по нему, и передаю его на input[type=file] (как у Вас в вопросе указано). Все прекрасно работает. Многократно применял
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы