Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Проблема с input:file (https://javascript.ru/forum/jquery/12530-problema-s-input-file.html)

Serghant 21.10.2010 22:27

Проблема с input:file
 
Доброго времени суток! Проблема с запуском input:file, есть html-код:
Код:

input.browsetext
{
        background: transparent;
        height: 17px;
        width: 190px;
        font-family:'PT_Sans_Caption';
        font-size:12px;
        text-align:left;       
        border: none;
        color:#28587b;
        padding-left:3px;
        padding-right:6px;
        }
.faketext {
        position: absolute;
        top: 0px;
        left: 20px;
        z-index: 5;
        background-repeat:no-repeat;
        height:22px;
        background-image:url(../images/edit/Edit205.png);
        margin-top:2px;
        width:205px;
}

div.fileinputs {
        position: relative;
        left:0;
}

div.fakebtn {
        float:left;
        position: absolute;
        top: 0px;
        left: 230px;
        z-index: 3;
}
input.fakefile {
        position: absolute;
        -moz-opacity:0 ;
        filter:alpha(opacity: 0);
        opacity: 0;
        z-index: 1;
        width:260px;       
        height:29px;
}

<div class="fileinputs">
                            <input type="file" class="fakefile">
                            <div class="faketext">
                                <input type="text" class="browsetext" readonly="">
                            </div>
                            <div class="fakebtn">
                               <img src="images/ButtonBrowse_03.png" alt="" border='0' />
                            </div>
                        </div>

$(".fakebtn img").click(function()
	{	
		//alert($(this).parent().parent().find(".fakefile").attr("class"));
		$(this).parent().parent().find("input:file.fakefile").click();
		//$("#ttt").click();
	});
   $(".fakebtn img").mouseover(function()
	{	
	//	alert($(this).parent().parent(".faketext input").attr("class"));
		$(this).css("cursor","pointer");
	});
	$(".fileinputs input:file").change(function () 
		{
				$(this).parent().find(".faketext input:text").val($(this).val());
		});

здесь нестандартное оформление input:file, суть в том что я нажимаю на img и должно открыться окно проводника, потом value подставляется в input:text. Код работает, но только в Хроме, в остальных браузерах событие не обрабатывается должным образом.
Имеется ли альтернативный способ вызова проводника??? Подскажите кто сталкивался:)

Gvozd 21.10.2010 23:38

Цитата:

Сообщение от Serghant
$(this).parent().parent().find("input:file.fakefil e").click();

вообще-то, единственный кросбраузерный способ сделать открытие окошка выбора файла, при клике не по input:file, а по другому объекту(рисунку к примеру) - это все-таки заставить пользователя кликнуть именно по Input:file, подсунув его полностью прозрачный под курсор мыши.
Цитата:

Сообщение от Serghant
$(this).parent().find(".faketext input:text").val($(this).val());

а получить полное значение Input:file кросбраузерно даже с хаками нельзя

Serghant 22.10.2010 09:57

хм... а у input:file не существует каких то специальных свойств?

Gvozd 22.10.2010 11:57

кроссбраузерно - нет
в value может быть полный путь, только имя файла, или вообще пустая строка, в зависимости от браузера.
в некоторых браузерах есть мультиаплоад, с прочими вкусностями.
но опять-таки не везде.

точно не помню по браузерам поведение, так что возможно хоть какую-то инфу и можно вытянуть одим из двух способов.
при условии что у посетителя достаточно свежий браузер.


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