입력 유형 = 파일 만 표시 버튼


154

<input type=file />텍스트 필드가없는 "찾아보기"버튼 만 보이도록 요소 를 스타일 지정 (또는 스크립트)하는 방법이 있습니까?

감사

편집 : 왜 이것이 필요한지 명확히하기 위해. http://www.morningz.com/?p=5의 다중 파일 업로드 코드를 사용 하고 있으며 값이 없으므로 입력 텍스트 필드가 필요하지 않습니다. 스크립트는 새로 선택된 파일을 페이지의 컬렉션에 추가합니다. 가능하다면 텍스트 필드가 없으면 훨씬 나아 보일 것입니다.

답변:


169
<input type="file" id="selectedFile" style="display: none;" />
<input type="button" value="Browse..." onclick="document.getElementById('selectedFile').click();" />

이것은 분명히 내 프로젝트에서 사용했을 것입니다.


1
이 답변은 매우 간단하고 우아하며 모든 브라우저에서 작동했습니다.
Mike.C.Ford

이것은 내가 찾은 최고의 솔루션입니다. 다른 모바일 브라우저에서 기발한 파일 입력 스타일 동작을 제거합니다. 이제 내 파일 입력 컨트롤이 나머지 레이아웃에서 아픈 엄지처럼 보이지 않습니다. 고마워요, 내가 1 이상 투표 할 수 있으면 좋겠다.
Highdown

... 그리고 onchange = "this.form.submit ();"를 추가하십시오. 파일 선택 후 업로드를 시작하려면 입력 파일 요소로 모든 요소를 ​​Form 태그로 감싸는 것을 잊지 마십시오.
Tomas

1
양식을 제출할 때 액세스 거부 오류가 발생하는 것처럼 IE8 이하에서는 작동하지 않습니다 ( "보안상의 이유로"IE8 이하에서는 js로 파일 입력을 트리거 할 수 없음)
unenthusiasticuser

3
@unenthusiasticuser는 동일한 보안상의 이유로 ipad에서 올바르게 작동하지 않습니다. :)
Mahi

80

나는 이것을 달성하려고 많은 시간을 보내고 있었다. 플래시 솔루션을 사용하고 싶지 않았으며 내가 본 jQuery 라이브러리는 모든 브라우저에서 신뢰할 수 없었습니다.

CSS로 완전히 구현 된 자체 솔루션을 찾았습니다 (버튼 클릭이 '클릭'되도록 보이기 위해 onclick 스타일 변경 제외).

http://jsfiddle.net/VQJ9V/307/ (FF 7, IE 9, Safari 5, Opera 11 및 Chrome 14에서 테스트 됨)에서 실제 예제를 사용해 볼 수 있습니다.

큰 파일 입력 (font-size : 50px)을 만든 다음 고정 크기와 overflow : hidden을 가진 div에 래핑하여 작동합니다. 입력은이 "창"div를 통해서만 볼 수 있습니다. div에 배경 이미지 또는 색상을 부여하고 텍스트를 추가 할 수 있으며 div 배경을 표시하기 위해 입력을 투명하게 만들 수 있습니다.

HTML :

<div class="inputWrapper">
    <input class="fileInput" type="file" name="file1"/>
</div>

CSS :

.inputWrapper {
    height: 32px;
    width: 64px;
    overflow: hidden;
    position: relative;
    cursor: pointer;
    /*Using a background color, but you can use a background image to represent a button*/
    background-color: #DDF;
}
.fileInput {
    cursor: pointer;
    height: 100%;
    position:absolute;
    top: 0;
    right: 0;
    z-index: 99;
    /*This makes the button huge. If you want a bigger button, increase the font size*/
    font-size:50px;
    /*Opacity settings for all browsers*/
    opacity: 0;
    -moz-opacity: 0;
    filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0)
}

문제가 있으면 알려 주시면 해결하겠습니다.


4
이것은 모든 브라우저에서 작동하는 최고의 솔루션이었습니다.
Fatal

2
당신은 남자입니다. FF 에서이 문제로 어려움을 겪어 왔으며 귀하의 솔루션은 특히 "글꼴 크기"를 사용하여 활성 영역을 늘림으로써 더 큰 버튼으로 실제로 작동하는 유일한 솔루션입니다. 감사! :)
jpincheira 2016 년

2
어떤 스크립트를 사용하지 않고 훌륭한 것
Bujji

1
트위터는 그렇게하지만 이것과 비교하면 약간 복잡했습니다. 나를 위해 잘 작동합니다!
1 권

좋은 해결책! 단 하나의 질문 : .fileInput에 100 % 너비를 부여하고 .inputWrapper의 너비를 auto로 설정하지 않는 이유는 무엇입니까?
luin

52

나는 오늘이 일을하는 데 하루를 낭비했다. 각 시나리오에서 작동하는 솔루션을 찾지 못했습니다.

그런 다음 텍스트 상자가없는 JQuery 파일 업로드예를 보았습니다 . 그래서 제가 한 것은 그들의 예를 들어서 관련 부분으로 줄였습니다.

이 솔루션은 적어도 IE 및 FF에서 작동하며 완전히 스타일을 지정할 수 있습니다. 아래 예제에서 파일 입력은 멋진 "파일 추가"버튼 아래에 숨겨져 있습니다.

<html>

<head>
    <title>jQuery File Upload Example</title>
    <style type="text/css">
        .myfileupload-buttonbar input
        {
            position: absolute;
            top: 0;
            right: 0;
            margin: 0;
            border: solid transparent;
            border-width: 0 0 100px 200px;
            opacity: 0.0;
            filter: alpha(opacity=0);
            -o-transform: translate(250px, -50px) scale(1);
            -moz-transform: translate(-300px, 0) scale(4);
            direction: ltr;
            cursor: pointer;
        }
        .myui-button
        {
            position: relative;
            cursor: pointer;
            text-align: center;
            overflow: visible;
            background-color: red;
            overflow: hidden;
        }
    </style>
</head>
<body>
    <div id="fileupload" >
        <div class="myfileupload-buttonbar ">
            <label class="myui-button">
                <span >Add Files</span>
                <input id="file" type="file" name="files[]" />
            </label>
        </div>
    </div>
</body>
</html>

4
중요한 부분은 컨테이너의 오버플로가 숨김으로 설정되어 있다는 것입니다.
Maxim V. Pavlov

1
이것은 적어도 IE & Chrome에서 저에게 효과적이었습니다. 감사합니다 :)
Kevin Dark

1
테두리 너비 : 0100px 200px; IE와 Chrome에서도 저를 위해 일했습니다. 감사.
Paul

2
원래 질문을 한 경우 이것을 답변으로 표시 할 의사가있었습니다. 감사.
마크 렌들

더 좋은 대답은 다음과 같습니다. 라벨을 사용하고 입력을 숨 깁니다. 잘 작동합니다!
gman

25

입력 파일 요소를 숨기고 해당 입력 파일의 클릭 이벤트를 트리거하는 표시 단추를 작성하십시오.

이 시도:

CSS

#file { width:0; height:0; } 

HTML :

<input type='file' id='file' name='file' />
<button id='btn-upload'>Upload</button>

자바 스크립트 (jQuery) :

$(function(){
    $('#btn-upload').click(function(e){
        e.preventDefault();
        $('#file').click();}
    );
});

내가 수행하는 jQuery 플러그인을했습니다 모두 당신을 위해 일 : github.com/mbitto/jquery.buttonFile
마누엘 Bitto

최신 버전의 IE에서는 작동하지 않습니다. 간접 클릭으로 인해 IE가 뒤집어지고 액세스가 거부됩니다. 짜증나.
Andrew

20

CSS로 입력 파일 태그를 숨기고 레이블을 추가 한 후 입력 버튼에 지정하십시오. 레이블을 클릭 할 수 있으며 클릭하면 파일 대화 상자가 나타납니다.

<input type="file" name="imageUpload" id="imageUpload" class="hide"/> 
<label for="imageUpload" class="button-style">Select file</label>

레이블에 스타일을 버튼으로 추가하십시오.
라이브 데모


1
2015 년 2 월 4 일 오늘 Safari에서 정상적으로 작동
gman

이것이 가장 간단하고 최상의 답변 일 수 있습니다. 또한 JS 코드가 업로드 된 파일 정보를 선택할 수 있도록 onchange처리기를 추가합니다 input.
David R Tribble

16

그것은 매우 어려울 것입니다. 파일 입력 유형의 문제점은 일반적으로 단일 DOM 요소로 취급되는 동안 두 개의 시각적 요소로 구성된다는 것입니다. 또한 일부 브라우저는 파일 입력에 대한 고유 한 모양과 느낌을 가지고 있으며 악몽으로 설정되어 있습니다. 파일 입력의 단점 에 대해서는 quirksmode.org 에서이 기사를 참조하십시오 . 나는 그것이 당신을 행복하게하지 않을 것이라고 보장합니다 (나는 경험에서 말합니다).

[편집하다]

실제로, 입력을 컨테이너 요소 (예 : div)에 넣고 요소에 음의 여백을 추가하면 벗어날 수 있다고 생각합니다. 텍스트 상자 부분을 화면에서 효과적으로 숨 깁니다. 다른 옵션은 링크 된 기사의 기술을 사용하여 버튼처럼 스타일을 지정하는 것입니다.


4
quirksmode에 관한 기사는 훌륭합니다. 스타일링 파일 입력은 여전히 ​​고통 스럽습니다. : P
MitMaro

포함 된 netagive-margin이 다른 브라우저 스타일과 사용자마다 다른 최소 글꼴 크기를 고려하면 제대로 작동하지 않는다고 생각합니다.
joebert

1
joebert : 나는 동의, 나는 최선의 선택이 기술은 쿼크 모드 기사에 표시 아직도 생각하는 방법을 고통스럽게 hackish ...
에릭 반 Brakel

14

모든 브라우저에서 작동하도록 수정되었습니다.

      <input type = "button" value = "Choose image" 
       onclick ="javascript:document.getElementById('imagefile').click();">
      <input id = "imagefile" type="file" style='visibility: hidden;' name="img"/>

나는 FF, Chrome & IE에서 테스트를 거쳤습니다.


6
나는 그것이 (마지막 테스트했을 때 FF 및 IE를 포함하여) 전체 브라우저에서 작동하지 않는다고 확신합니다. 크롬에서 작동하는 유일한 브라우저는 Chrome이었습니다.
허먼 샤프

jQuery에서만 작동하지만 독립 실행 형 솔루션은 아닙니다.
솔레노이드

3
이것은 작동하는 것처럼 보입니다 (파일 선택기 메뉴 가 나타납니다 ). 양식이 제출 될 때 파일은 보안상의 이유로 FireFox 및 IE로 전송되지 않습니다.
ampersandre

13

나는 최고의 두 가지 솔루션을 구현하려고 시도했지만 결국 엄청난 시간 낭비가되었습니다. 결국이 .css 클래스를 적용하면 문제가 해결되었습니다 ...

input[type='file'] {
  color: transparent;
}

끝난! 매우 깨끗하고 매우 간단합니다 ...


1
이것은 좋은 방법입니다!
Kaow

9

이것을하는 또 다른 쉬운 방법. "입력 유형 파일"태그를 html로 만들고 숨 깁니다. 그런 다음 단추를 클릭하고 필요에 따라 형식을 지정하십시오. 그런 다음 javascript / jquery를 사용하여 버튼을 클릭 할 때 프로그래밍 방식으로 입력 태그를 클릭하십시오.

HTML :-

<input id="file" type="file" style="display: none;">
<button id="button">Add file</button>

자바 스크립트 :-

document.getElementById('button').addEventListener("click", function() {
    document.getElementById('file').click();
});

jQuery :-

$('#button').click(function(){
    $('#file').click();
});

CSS :-

#button
{
    background-color: blue;
    color: white;
}

다음은 작동하는 JS 바이올린입니다 .- http://jsfiddle.net/32na3/


2
이것은 깔끔한 솔루션이지만 Chrome에서 작동하지 않습니다. 분명히 다른 사람들도 할 수 없습니다. Opera 및 Chrome에서는 보안상의 이유로 입력 유형 파일을 클릭 할 수 없습니다. 여기에 나와 이것에 대한 솔루션에 대한 자세한 내용을 볼 수 있습니다. stackoverflow.com/a/3030174/2650732
wojjas

이 답변을 썼을 때 크롬에서 작동했습니다. 알려 주셔서 감사합니다, 이에 따라 내 대답을 업데이트합니다
divyenduz

7

위의 권장 코드 중 일부를 사용했으며 많은 시간을 허비 한 후 결국 css bag free 솔루션을 사용했습니다.

여기에서 실행할 수 있습니다 -http : //jsfiddle.net/WqGph/

그러나 더 나은 해결책을 찾았습니다 -http : //jsfiddle.net/XMMc4/5/

 <input type = "button" value = "Choose image #2" 
   onclick ="javascript:document.getElementById('imagefile').click();">
       <input id = "imagefile" type="file" style='display:none;' name="img" value="none"/>see jsfiddle code for examples<br/>

문제는 onchange숨겨진 input요소 에 대해 이벤트가 트리거되지 않는다는 것 입니다.
David R Tribble

6

여기 내 좋은 치료법이 있습니다.

<input type="file" id="myFile" style="display:none;" />
<button type="button" onclick="document.getElementById('myFile').click();">Browse</button>

적어도 사파리에서 작동했습니다.

평범하고 단순합니다.


4

이미지에 레이블을 지정할 수 있으므로 이미지를 클릭하면 버튼의 클릭 이벤트가 트리거됩니다. 일반 버튼을 보이지 않게 만들 수 있습니다.

<form>
    <label for="fileButton"><img src="YourSource"></label>    <!--You don't have to put an image here, it can be anything you like-->
    <input type="file" id="fileButton" style="display:none;"/>
</form>

그것은 모든 브라우저에서 저에게 효과적이며 사용하기 매우 쉽습니다.


4

다음과 같이 숨겨진 파일 입력에서 click 이벤트를 전달할 수 있습니다.

<form action="#type your action here" method="POST" enctype="multipart/form-data">
   		<div id="yourBtn" style="height: 50px; width: 100px;border: 1px dashed #BBB; cursor:pointer;" >Click to upload!</div>
    	<!-- hide input[type=file]!-->
    	<div style='height: 0px;width:0px; overflow:hidden;'><input id="upfile" type="file" value="upload"/></div>
    	<input type="submit" value='submit' >
    </form>

    <script type="text/javascript">
    	var btn = document.getElementById("yourBtn");
    	var upfile = document.getElementById("upfile"); 
    	btn.addEventListener('click',function(){
    		if(document.createEvent){
    			var ev = document.createEvent('MouseEvents');
    			ev.initEvent('click',true,false);
    			upfile.dispatchEvent(ev);
    		}else{
        		upfile.click();
    		}
    	});
    
    </script>


var ev = document.createEvent('HTMLEvents'); HTMLEvents를 MouseEvents로 변경var ev = document.createEvent('MouseEvents');
jiang min

감사합니다! 나는 실행 가능한 코드에 게시물을 변환 MouseEvent는에 HtmlEvents 변경
파비안 Schmengler에게

4

HTML :

<input type="file" name="upload" id="upload" style="display:none"></input>
    <button  id="browse">Upload</button>

쿼리

 $(document).ready(function(){
        $("#browse").click(function(){
        $("#upload").click();
        });
 });

희망이 작동 :)


4

입력 요소에 글꼴 불투명도 0을 지정할 수 있습니다. '파일 선택'단추를 숨기지 않고 텍스트 필드를 숨길 수 있습니다.

자바 스크립트가 필요하지 않으며 IE 9와 같은 명확한 크로스 브라우저

예 :

input {color: rgba(0, 0, 0, 0);}

3

이것으로 정말 해키 솔루션을 ...

<style type="text/css"> 
    input[type="file"]
    { 
        width: 80px;        
    } 
</style>

<input id="File1" type="file" />

문제는 텍스트 필드를 숨기는 너비 속성이 브라우저마다 다르고 Windows XP 테마마다 다릅니다. 어쩌면 당신이 할 수있는 일이 있습니까? ...


IE6에서는 작동하지 않지만 브라우저는 속성 선택기를 이해하지 못합니다.
Adrian Godong

3

나는 이것이 오래된 게시물이라는 것을 알고 있지만 텍스트를 사라지게하는 간단한 방법은 텍스트 색상을 배경 색상으로 설정하는 것입니다.

예를 들어 텍스트 입력 배경이 흰색이면 다음과 같습니다.

input[type="file"]{
color:#fff;
}

이것은 브라우저로 인해 여전히 검은 색인 파일 선택 텍스트에 영향을 미치지 않습니다.


1
사용자가 해당 부분을 클릭하면 업로드 팝업이 열립니다.
Praveen

3

이것은 나를 위해 작동합니다 :

input[type="file"]  {
    color: white!important;
}

2

내 솔루션은 "druveen"과 같은 div 내에서 설정하는 것입니다. 그러나 div에 내 버튼 스타일을 광고하고 (a : hover가있는 버튼처럼 보이게 함) 스타일을 "opacity : 0;"으로 설정했습니다. 입력에. 나를 위해 매력을 발휘합니다.


2

방금 너비가 85px 인 입력 파일의 스타일을 지정했으며 텍스트 필드가 전혀 사라졌습니다.


텍스트 필드가 사라 졌습니까? "모두"mighr은 거기에 부정을 암시하지만 문법에 결함이 있습니다 (따라서 모호합니다).
Kirk Woll

2

이 HTML 코드는 파일 업로드 버튼 만 표시합니다

<form action="/action_page.php">
    <input type="button" id="id" value="Upload File"  onclick="document.getElementById('file').click();" />
    <input type="file" style="display:none;" id="file" name="file" onchange="this.form.submit()"/>  
</form>

1
코드 스 니펫의 기능을 설명하는 컨텍스트 정보를 답변에 추가하십시오.
Clijsters

1
<a href="#" id="select_logo">Select Logo</a> <input type="file" id="logo"> 

$("#logo").css('opacity','0');

$("#select_logo").click(function(){
   $().trigger('click');
   return false;
});

1

나에게 가장 간단한 방법은 배경색과 같은 글꼴 색을 사용하는 것입니다. 단순하고 우아하지는 않지만 유용합니다.

<div style="color:#FFFFFF">   <!-- if background page is white, of course -->
<input class="fileInput" type="file" name="file1"/></div>

1

모든 브라우저 에서이 작업을 수행하는 가장 좋은 방법은 다음과 같습니다.

CSS를 잊어 버리세요!

<p>Append Image:</p> 
<input type="button" id="clickImage" value="Add Image" />
<input type="file" name="images[]" id="images" multiple />

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" charset="utf-8"></script>

<script>
$('#images').hide();        
$('#clickImage').click( function() {    
    $('#images').trigger('click');  
});
</script>

SAFARI에서 작동하지 않습니다 ... 보안상의 이유로 .trigger ( 'click')를 허용하지 않기 때문에 :? safari에서 작동하게하려면 파일 버튼을 동적으로 만들고 다시로드 할 때 다시 추가하십시오.
user1965301

1

이 모든 대답은 귀엽지 만 CSS는 모든 브라우저와 장치에서 동일하지 않기 때문에 작동하지 않습니다. 내가 작성한 첫 번째 대답은 Safari 이외의 모든 것에서 작동합니다. 입력 텍스트를 지울 때마다 동적으로 작성되고 다시 작성되어야 할 때마다 모든 브라우저에서 작동하도록하려면 다음을 수행하십시오.

    var imageDiv = document.createElement("div");   
    imageDiv.setAttribute("id", "imagediv");
    imageDiv.style.cssText = 'position:relative; vertical-align: bottom;';  
    var imageText = document.createTextNode("Append Image:");
    var newLine = document.createElement("br"); 
    var image = document.createElement("input");    
    image.setAttribute("type", "file");
    image.setAttribute("id", "images");
    image.setAttribute("name", "images[]");     
    image.setAttribute("multiple", "multiple");
    imageDiv.appendChild(imageText); 
    imageDiv.appendChild(newLine); 
    imageDiv.appendChild(image); 
    questionParagraph.appendChild(imageDiv);

1

tmanthey의 대답은 Firefox v20에서 테두리 너비로 재생할 수 없다는 점을 제외하면 상당히 좋습니다. 당신이 볼 경우 링크 버튼을 더 크게하기 위해 파이어 폭스 (-300px, 0 픽셀) 규모 (4) 번역 : 그들은 변환, 글꼴 크기 = 23 픽셀을 사용하여 문제를 해결 (데모를 정말 여기에 표시 할 수 없습니다).

드래그 앤 드롭 입력 상자로 만들려면 다른 div에서 .click ()을 사용하는 다른 솔루션은 쓸모가 없습니다.


1

여기에 몇 가지 유효한 옵션이 있지만 비슷한 문제를 해결하는 동안 내가 생각해 낸 것을 줄 것이라고 생각했습니다. http://jsfiddle.net/5RyrG/1/

<span class="btn fileinput-button">
    <span>Import Field(s)</span>
    <input id="fileupload" type="file" name="files[]" onchange="handleFiles(this.files)" multiple>
</span>
<div id="txt"></div>

function handleFiles(files){
    $('#txt').text(files[0].name);  
}

1

다음 코드로 해결되었습니다.

<div style="overflow: hidden;width:83px;"> <input style='float:right;' name="userfile" id="userfile" type="file"/> </div>


1

나는 이것을 썼다 :

<form action='' method='POST' name='form-upload-image' id='form-upload-image' enctype='multipart/form-data'>

    <div style="width: 0; height: 0; overflow: hidden;">
        <input type="file" name="input-file" id="input-file" onchange="this.files.length > 0 ? document.getElementById('form-upload-image').submit():null;" />
    </div>
    
</form>

<img src="image.jpg" style="cursor: pointer;" onclick="document.getElementById('input-file').click();" />

모든 브라우저에서, jQuery, CSS없이 잘 작동합니다.


1

다음은 모든 주요 브라우저에서 작동하는 @ampersandre의 인기있는 솔루션의 단순화 된 버전입니다. ASP.NET 마크 업

<asp:TextBox runat="server" ID="FilePath" CssClass="form-control"
    style="float:left; display:inline; margin-right:5px; width:300px"
    ReadOnly="True" ClientIDMode="Static" />
<div class="inputWrapper">
    <div id="UploadFile" style="height:38px; font-size:16px; 
      text-align:center">Upload File</div>
    <div>
      <input name="FileUpload" id="FileInput" runat="server" 
             type="File" />
    </div>
  </div>
  <asp:Button ID="UploadButton" runat="server" 
    style="display:none" OnClick="UploadButton_Click" />
</div>
<asp:HiddenField ID="hdnFileName" runat="server" ClientIDMode="Static" />

JQuery 코드

$(document).ready(function () {

   $('#UploadFile').click(function () {
       alert('UploadFile clicked');
       $('[id$="FileInput"]').trigger('click');
   });

   $('[id$="FileInput"]').change(function (event) {
       var target = event.target;
       var tmpFile = target.files[0].name;
       alert('FileInput changed:' + tmpFile);
       if (tmpFile.length > 0) {
          $('#hdnFileName').val(tmpFile);
       }
       $('[id$="UploadButton"]').trigger('click');
   });
});

CSS 코드

.inputWrapper {
height: 38px;
width: 102px;
overflow: hidden;
position: relative;
padding: 6px 6px;
cursor: pointer;
white-space:nowrap;
/*Using a background color, but you can use a background image to represent
 a button*/
background-color: #DEDEDE;
border: 1px solid gray;
border-radius: 4px;
-moz-user-select: none;
-ms-user-select: none;
-webkit-user-select: none;
user-select: none;
}

standard와 함께 서버 포스트 백에 숨겨진 "UploadButton"클릭 트리거를 사용합니다. with "Upload File"텍스트는 오버플로시 래퍼 div에서 입력 컨트롤을 보이지 않게하므로 "file input"컨트롤 div에 스타일을 적용 할 필요가 없습니다. $ ([id $ = "FileInput"]) 선택기는 표준 ASP.NET 접두사가 적용된 id 섹션을 허용합니다. 파일이 업로드되면 hdnFileName.Value 뒤의 서버 코드에서 설정된 FilePath 텍스트 상자 값입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.