CSS:
.button {<br/>
width: 193px; /* размеры кноки */<br/>
height: 62px;<br/>
margin: 14px 0px;<br/>
background: url(img/0309input.jpg);<br/>
overflow: hidden; /* поможет избежать выхода поля за границы кнопки */<br/>
position: relative; /* относительно этого блока будем позиционировать поле */<br/>
}<br/>
.button input {<br/>
height: 200px;<br/>
position: absolute; /* для более простого позиционирования поля */<br/>
top: 0; /* начальные координаты */<br/>
right: 0;<br/>
opacity: 0; /* само поле делаем прозрачным, чтобы показать фон кнопки */<br/>
filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);<br/>
cursor: pointer;<br/>
font-size: 200px;<br/>
z-index: 5;<br/>
}<br/>
#filename {<br/>
z-index: 3;<br/>
position: absolute;<br/>
top: 6px;<br/>
left: 6px;<br/>
width: 184px;<br/>
height: 19px;<br/>
overflow: hidden;<br/>
}<br/>
HTML:
Загрузить новое:<br/>
<div class="button"><br/>
<div id="filename"></div><br/>
<input id="photo" type="file" name="photo" value=""/><br/>
</div><br/>
jQuery:
$(document).ready(function(){<br/>
$("#photo").change(function() {<br/>
$("#filename").text($("#photo").val());<br/>
});<br/>
});<br/>
Ubuntu 10.04
Результат в Opera 10.61
Результат в Chrome
Результат в Firefox
Собственно вопрос: ЧЯДНТ & WTF?
Что это еще за C:\fakepath и откуда он берется? При этом обычные, не стилизованные, файл-инпуты в Опере отображают правильный полный путь от корня…
UPD:
Только что проверила на компах с Win7, WinXP — то же самое.
UPD 2:
Сделала так:
function str_replace(search, replace, subject) {
return subject.split(search).join(replace);
}
$("#photo").change(function() {
var newpath = str_replace(«C:\\fakepath\\», "", $("#photo").val());
$("#filename").text(newpath);
});
Работает.
Однако шокирована наличием такой «секьюрити-приблуды», или же такого «средства совместимости», неважно. Я уже и не помню, на каком количестве сайтов использовала этот способ стилизации инпута… это теперь на них везде fakepath? Мда…