<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.