Вам не нужен JavaScript для этого! Вот кросс-браузерное решение:
См. Этот пример! - Работает в Chrome / FF / IE - (IE10 / 9/8/7)
Наилучшим подходом было бы иметь настраиваемый элемент метки с атрибутом for
, прикрепленный к скрытому элементу ввода файла. (Атрибут for
метки должен совпадать с id
элемента файла, чтобы это работало).
<label for="file-upload" class="custom-file-upload">
Custom Upload
</label>
<input id="file-upload" type="file"/>
В качестве альтернативы вы также можете просто обернуть элемент ввода файла меткой: (пример)
<label class="custom-file-upload">
<input type="file"/>
Custom Upload
</label>
С точки зрения стиля, просто скрыть 1 элемент ввода, используя селектор атрибута .
input[type="file"] {
display: none;
}
Тогда все, что вам нужно сделать, это стилизовать пользовательский элемент label
. (пример) .
.custom-file-upload {
border: 1px solid #ccc;
display: inline-block;
padding: 6px 12px;
cursor: pointer;
}
1 - Стоит отметить, что если скрыть элемент с помощью display: none
, он не будет работать в IE8 и ниже. Также следует учитывать тот факт, что jQuery validate не проверяет скрытые поля по умолчанию. Если что-то из этого является проблемой для вас, вот два разных способа скрыть ввод ( 1 , 2 ), которые работать в этих условиях.