<input type =“file”/>의 버튼 텍스트를 변경하는 방법은 무엇입니까?


257
<input type="file" value="Browse" name="avatar" id="id_avatar" />

을 수정하려고 시도했지만 value작동하지 않습니다. 버튼 텍스트를 사용자 정의하는 방법은 무엇입니까?


파일 이름이나 버튼 텍스트에 대해 이야기하고 있습니까?
Artelius

답변:


153

양식의 파일 필드 스타일을 지정하는 데 사용되는 Bootstrap FileStyle을 사용하십시오 . Twitter Bootstrap이라는 jQuery 기반 컴포넌트 라이브러리 용 플러그인입니다.

샘플 사용법 :

포함:

<script type="text/javascript" src="js/bootstrap-filestyle.min.js"> </script>

자바 스크립트를 통해 :

$(":file").filestyle();

데이터 속성을 통해 :

<input type="file" class="filestyle" data-classButton="btn btn-primary" data-input="false" data-classIcon="icon-plus" data-buttonText="Your label here.">

나를 위해 일하지 않는 것 같습니다. 여전히 브로 저의 기본 버튼이 표시됩니다. 또한 github.com/markusslima/bootstrap-filestyle.git 의 데모도 작동하지 않습니다. 모든 예제는 기본 버튼을 보여줍니다. 뭔가 빠졌습니까?
예.

7
@Tony Uhh .... Bootstrap이 "wacky <img /> hack"을 사용하지 않는다고 생각하는 이유는 무엇입니까? :-)
Andz

@Ya 어떤 브라우저와 버전을 말할 수 있습니까? Linux의 Chrome 버전 43.0.2357.130 (64 비트)에서 지금 테스트되었으며 모든 예제가 완벽하게 작동합니다.
Fernando Kosh

20
그런 작은 문제에 자바 스크립트 라이브러리 (플러그인과 함께!)를 던지는 것은 우아하지 않은 과잉입니다.
MKaama

3
공감. 답이 아니며 추가 라이브러리가 필요한 해결 방법 일뿐입니다. 대답은 브라우저의 렌더링 동작을 변경하려는 것입니다.
wdetac

108

대신 이미지를 넣고 다음과 같이 할 수 있습니다.

HTML :

<img src="/images/uploadButton.png" id="upfile1" style="cursor:pointer" />
<input type="file" id="file1"  name="file1" style="display:none" />

jQuery :

$("#upfile1").click(function () {
    $("#file1").trigger('click');
});

주의 사항 : IE9 및 IE10에서 javascript를 통해 파일 입력에서 onClick을 트리거하면 양식이 '위험한'으로 플래그 지정되고 Javascript로 제출 할 수 없으며 전통적으로 제출할 수 있는지 확실하지 않습니다.


5
이것은 영리한 솔루션입니다. <button> 요소로도이 작업을 수행 할 수 없습니까?
코드 사령관

1
@Code Commander-감사합니다. 예, 원하는 모든 요소로 할 수 있지만 가장 일반적인 것은 <image> 요소입니다. "파일 입력"의 button + text 필드를 제거하십시오.
ParPar

2
위의 내용을 사용하는 사람에게만 앞서 가면 일부 모바일 브라우저는 프로그래밍 방식으로 파일 입력 클릭 트리거를 비활성화합니다. 특히 Galaxy S III 용 Android 4
newshorts

<input type="file" 내부에 asp.net gridview 행을 사용하여 행을 동적으로 추가 할 수 있습니다. 따라서 이미지를 클릭하는 동안 관련 입력 클릭 트리거 (동일한 행)를 호출하는 것은 머리에 큰 고통이 될 것입니다! : /
sohaiby

귀하의 솔루션이 작동하지 않습니다. 테두리, 여백, 패딩 및 배경색을 설정하지 않았거나 분명 할 것입니다.
yan bellavance

88

파일 입력을 숨 깁니다. 클릭 이벤트를 캡처하여 숨겨진 입력으로 전달할 새 입력을 작성하십시오.

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

ie7 모드로 HTA 파일을 던지면 ;끝에 를 제거해야 했습니다.
ATek

위트, 텍스트 두 단어 만 변경하기 위해 부트 스트랩을 포함하고 싶지는 않지만 파일 입력이 동적으로 생성 된 경우 어떻게해야합니까?
asparism

@asparism은 JavaScript를 사용하여 DOM을 조작하고 스타일을 설정하여 숨기고 before ()를 사용하고 새로운 입력 요소를 추가합니까?
MushyPeas

3
@MushyPeas 가장 쉬운 방법입니다. CSS로 게임을 시도했지만이 솔루션은 훨씬 빠르고 쉽습니다. 감사합니다
Mara

2
이것은 나에게 가장 쉬운 방법이었습니다! 또한 이상한 "찾아보기"파일 버튼을 표시 할 필요없이 다른 폼 버튼 옵션 세트 중 하나로 'mock'파일 버튼을 스타일링 할 수있었습니다.
Harry Mantheakis

47

"파일 업로드 ..."텍스트는 브라우저에 의해 미리 정의되어 있으며 변경할 수 없습니다. 이 문제를 해결하는 유일한 방법은 swfupload 와 같은 Flash 또는 Java 기반 업로드 구성 요소를 사용하는 것 입니다.


3
변경할 수 없다는 것을 증명할 수 있습니까?
user198729

또는 최소한 오픈 소스 코드에 대해서는 브라우저 소스 코드를 찾아보십시오.
Pekka

이것은 대답에 의해 (또 다른 질문으로, 'TYPE = "FILE"유형의 입력 필드에 대한'값이 'VALUE = "C : \ someFile.txt"'인 이유는 무시합니다. 브라우저? ") : stackoverflow.com/questions/1342039
Peter Mortensen

23

작동 모든 브라우저에서 완벽하게 너무 당신을 위해 작동 바랍니다.

HTML :
<input type="file" class="custom-file-input">

CSS :

 .custom-file-input::-webkit-file-upload-button {
  visibility: hidden;
}
.custom-file-input::before {
  content: 'Select some files';
  display: inline-block;
  background: -webkit-linear-gradient(top, #f9f9f9, #e3e3e3);
  border: 1px solid #999;
  border-radius: 3px;
  padding: 5px 8px;
  outline: none;
  white-space: nowrap;
  -webkit-user-select: none;
  cursor: pointer;
  text-shadow: 1px 1px #fff;
  font-weight: 700;
  font-size: 10pt;
}
.custom-file-input:hover::before {
  border-color: black;
}
.custom-file-input:active::before {
  background: -webkit-linear-gradient(top, #e3e3e3, #f9f9f9);
}

content: 'Select some files';원하는 텍스트로 변경''

firefox로 작업하지 않으면 입력 대신 다음을 사용하십시오.

<label class="custom-file-input" for="Upload" >
</label>

<input id="Upload" type="file" multiple="multiple" name="_photos" accept="image/*" style="visibility: hidden">

그래도 Safari에서 작동
Cullub

FF 41.0.2에서 완벽하게 작동합니다. 브라우저 호환성 문제로 실행 중이므로 문제를 최소화하려면 CSS BOX MODEL을 참조하십시오.
Code Black

1
문제는 아마도 FF가 웹킷이 아닌 Gecko에 빌드되어 있다는 것입니다. (내 최선의 추측)
Cullub

2
<label id = "addButton"for = "Upload"style = "background-color : # 000; color : #fff; padding : 4px; border-radius : 4px; font-family : monospace;" > 일부 파일 선택 </ label> <input id = "Upload"type = "file"multiple = "multiple"name = "_ photos"accept = "image / *"style = "visibility : hidden">
코드 블랙

4
알았어 고마워! 이 JSFiddle을 확인하십시오 . 당신이 그것으로 당신의 대답을 편집한다면, 나는 그것이
공감할

10

입력 파일 요소의 버튼 텍스트를 변경하는 플러그인 JQuery와있다.

HTML 예 :

<input type="file" id="choose-file" />

JS 예 :

$('#choose-file').inputFileText({
    text: 'Select File'
});

결과:

플러그인 결과



9

간단히

<label class="btn btn-primary">
  <i class="fa fa-image"></i> Your text here<input type="file" style="display: none;"  name="image">
</label>

[스 니펫으로 편집]

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>

<label class="btn btn-primary">
<i class="fa fa-image"></i> Your text here<input type="file" style="display: none;" name="image">
</label>


내가 여기에 무엇을 보았는지 jsfiddle.net
Ken Karlo

감사합니다. 정확히 내가 원하는 것 :)
Garth Baker

7

나는 이것이 당신이 원하는 것이라고 생각합니다.

<button style="display:block;width:120px; height:30px;" onclick="document.getElementById('getFile').click()">Your text here</button>


<input type='file' id="getFile" style="display:none"> 

3

편집 : 이제 파일 경로가 아닌 버튼 텍스트에 대해 묻는 주석으로 볼 수 있습니다. 내 잘못이야. 이 질문을 우연히 발견 한 다른 사람이 내가 원래했던 방식으로 해석하는 경우를 대비하여 원래 답변을 아래에 남겨 두겠습니다.

2 차 편집 : 질문을 오해하기로 결정하고 답변이 관련이 없기 때문에이 답변을 삭제했습니다. 그러나 다른 답변의 의견에 따르면 사람들은 여전히이 답변을보고 싶어서 삭제하지 않습니다.

내 원래 답변 (OP가 버튼 텍스트가 아닌 경로에 대해 묻는다고 생각했습니다) :

보안상의 이유로 지원되는 기능이 아닙니다 . Opera 웹 브라우저가이를 지원했지만 제거되었습니다. 이것이 지원된다면 무엇이 가능한지 생각해보십시오. 파일 업로드 입력으로 페이지를 작성하고 민감한 파일의 경로로 미리 채우고 onload이벤트 에 의해 트리거되는 javascript를 사용하여 양식을 자동 제출할 수 있습니다. 이것은 사용자가 그것에 대해 무언가를하기에는 너무 빠릅니다.


3

사용 <label>캡션에 대한

<form enctype='multipart/form-data' action='/uploads.php' method=post>
<label for=b1>
    <u>Your</u> caption here
<input style='width:0px' type=file name=upfile id=b1
 onchange='optionalExtraProcessing(b1.files[0])'
 accept='image/png'>
</label>
</form>

이것은 자바 스크립트없이 작동 합니다 . 라벨을 마음의 내용에 따라 어느 정도의 복잡도로 꾸밀 수 있습니다. 레이블을 클릭하면 클릭이 자동으로 파일 입력으로 리디렉션됩니다. 파일 입력 자체는 어떤 방법으로도 보이지 않게 할 수 있습니다. 레이블을 버튼처럼 보이게하려면 다음과 같은 여러 가지 해결책이 있습니다.

label u {
    -webkit-appearance: button;
    -moz-appearance: button;
    appearance: button;

    text-decoration: none;
    color: initial;
}

2

CSS 및 부트 스트랩 클래스 만

        <div class="col-md-4 input-group">
            <input class="form-control" type="text"/>
            <div class="input-group-btn">
                <label for="files" class="btn btn-default">browse</label>
                <input id="files" type="file" class="btn btn-default"  style="visibility:hidden;"/>
            </div>
        </div>

1
  1. 그 전에 <input type="file">이미지를 추가하면 이미지 <input style="position:absolute">의 공간을 차지합니다.<input type="file">
  2. 파일 요소에 다음 CSS를 사용하십시오.

    position:relative;  
    opacity:0;  
    z-index:99;

0

레일을 사용하고 문제가 발생하면 @Fernando Kosh가 게시 한 원래 답변의 팁을 추가하고 싶습니다.

  • 파일 zip 다운로드 및 파일 복사 bootstrap-filestyle.min.js ke 폴더 app / assets / javascripts /
  • application.js를 열고 아래에이 줄을 추가하십시오

    // = 부트 스트랩 파일 스타일 필요

  • 커피를 열고이 줄을 추가하십시오

    $ ( ": file"). filestyle ({buttonName : "btn-primary", buttonBefore : true, buttonText : "여기에있는 텍스트", 아이콘 : false});


0

CSS 트릭을 간단히 추가 할 수 있습니다. 당신은 자바 스크립트가 필요하지 않습니다 이상의 입력 파일을 그리고 난 계속 기존 값 속성을 . css 만 추가하면 됩니다 . 이 솔루션을 사용해 볼 수 있습니다.

.btn-file-upload{
     width: 187px;
     position:relative;
 }

.btn-file-upload:after{
    content:  attr(value);
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;    
    width: 48%;
    background: #795548;
    color: white;
    border-radius: 2px;
    text-align: center;
    font-size: 12px;
    line-height: 2;
 }
<input type="file" class="btn-file-upload" value="Uploadfile" />


0

다음은 순수한 HTML 및 자바 스크립트를 사용하여 파일 형식의 입력 텍스트를 "변경"하는 방법입니다.

<input id='browse' type='file' style='width:0px'>
<button id='browser' onclick='browse.click()'>
    *The text you want*
</button>

0

나를 위해 bootstrap-filestyle 사용하여 사용자 정의 텍스트를 작동하지 않습니다 . 그것은 버튼 장식에 도움이되지만 CSS로 레슬링하기 전에 텍스트가 이상하게 변경되어 다음을 시도합니다.

$( document ).ready(function() {
   $('.buttonText').html('Seleccione ficheros');
});

bootstrap-filestyle은 butonText라는 클래스를 사용하여 구성 요소를 span으로 렌더링하므로 문서를로드 할 때 텍스트 만 변경하면됩니다. 쉬운 일이며 모든 브라우저에서 작동해야합니다.

건배


0

내 프로젝트에서 이와 같이했습니다.

.btn-outlined.btn-primary {
  color: #000;
}
.btn-outlined.btn-primary:active, .btn-outlined.btn-positive:active, .btn-outlined.btn-negative:active {
  color:#000;
}
.btn-block {
  display: block;
  width: 100%;
  padding: 15px 0;
  margin-bottom: 10px;
  font-size: 18px;
  font-family: Arial, Helvetica, sans-serif;
  text-align: center;
}
<label for="fileUpload" class="btn btn-primary btn-block btn-outlined">Your text</label>
<input type="file" id="fileUpload"style="display: none;">


-1

이것은 당신에게 도움이 될 수있는 대체 솔루션입니다. 버튼에 나타나는 텍스트를 숨기고 div의 배경색과 혼합합니다. 그런 다음 div에 원하는 제목을 줄 수 있습니다.

<div style="padding:10px;font-weight:bolder; background-color:#446655;color: white;margin-top:10px;width:112px;overflow: hidden;">
     UPLOAD IMAGE <input style="width:100px;color:#446655;display: inline;" type="file"  />
</div>

Chrome 39에서는 이미지 업로드 텍스트와 <입력> 버튼이 모두 표시됩니다. 아마도 크롬이 파일 입력을 처리 한 후에이 게시물을 변경 했습니까?
EricP

@ yan-bellavance 무엇을하고 있습니까? 답이 맞지 않거나 도움이되지 않는다고 생각되면 공감하지만 결코 훼손하지 않습니다!
Kaiido
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.