programing

입력 유형 = 파일 표시 전용 버튼

newstyles 2023. 9. 6. 21:52

입력 유형 = 파일 표시 전용 버튼

스타일(또는 스크립트)을 작성할 수 있는 방법이 있습니까?<input type=file />텍스트 필드 없이 "찾아보기" 버튼만 보이는 요소?

감사해요.

편집: 제가 왜 이것이 필요한지 명확히 하기 위해서입니다.http://www.morningz.com/ ?p=5의 다중 파일 업로드 코드를 사용하고 있는데, 가치가 없기 때문에 입력 텍스트 필드가 필요 없습니다.스크립트는 페이지의 컬렉션에 새로 선택한 파일만 추가합니다.텍스트 필드가 없으면 훨씬 더 보기 좋을 것 같습니다.

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

이것은 제가 프로젝트에 사용한 것이기 때문에 분명 효과가 있을 것입니다.

저는 이 일을 해내려고 애를 먹고 있었습니다.플래시 솔루션을 사용하고 싶지 않았고, 모든 브라우저에서 신뢰할 수 있는 jQuery 라이브러리도 없었습니다.

저는 CSS에서 완전히 구현되는 자체 솔루션을 생각해 냈습니다(버튼이 '클릭' 된 것처럼 보이도록 on click 스타일 변경을 제외하고).

여기 http://jsfiddle.net/VQJ9V/307/ (FF 7, IE 9, Safari 5, Opera 11 및 Chrome 14에서 테스트됨)에서 사용할 수 있습니다.

큰 파일 입력(글꼴 크기:50px)을 만든 다음 고정된 크기와 오버플로:숨김이 있는 디브로 래핑하여 작동합니다.그러면 입력은 이 "window" 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)
}

문제가 있으면 말씀해주시면 수정해보도록 하겠습니다.

나는 오늘 하루를 헛되이 보내면서 일을 시작했습니다.여기 있는 모든 해결책들이 제 시나리오마다 효과가 있는 것을 발견하지 못했습니다.

그때 텍스트가 없는 JQuery File Upload의 예를 본 것이 생각났습니다.그래서 제가 한 것은 그들의 예를 들어 해당 부분으로 압축한 것입니다.

이 솔루션은 적어도 IE와 FF에 적합하며 완전히 스타일링 할 수 있습니다.아래 예제에서는 화려한 "Add Files" 버튼 아래에 파일 입력이 숨겨져 있습니다.

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

for attribute가 있는 레이블 태그를 for attribute 값을 파일 입력 버튼에 할당합니다.
이제 레이블을 클릭하면 브라우저에서 파일 찾아보기 대화 팝업이 자동으로 열립니다.
참고: CSS를 사용하여 파일 입력 버튼을 숨깁니다.

아래 라이브 데모를 확인해 보십시오.

$('#imageUpload').change(function() {
  readImgUrlAndPreview(this);

  function readImgUrlAndPreview(input) {
    if (input.files && input.files[0]) {
      var reader = new FileReader();
      reader.onload = function(e) {
        $('#imagePreview').removeClass('hide').attr('src', e.target.result);
      }
    };
    reader.readAsDataURL(input.files[0]);
  }
});
.hide {
  display: none;
}

.btn {
  display: inline-block;
  padding: 4px 12px;
  margin-bottom: 0;
  font-size: 14px;
  line-height: 20px;
  color: #333333;
  text-align: center;
  vertical-align: middle;
  cursor: pointer;
  border: 1px solid #ddd;
  box-shadow: 2px 2px 10px #eee;
  border-radius: 4px;
}

.btn-large {
  padding: 11px 19px;
  font-size: 17.5px;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
}

#imagePreview {
  margin: 15px 0 0 0;
  border: 2px solid #ddd;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>

<div clas="file_input_wrap">
  <input type="file" name="imageUpload" id="imageUpload" class="hide" />
  <label for="imageUpload" class="btn btn-large">Select file</label>
</div>
<div class="img_preview_wrap">
  <img src="" id="imagePreview" alt="Preview Image" width="200px" class="hide" />
</div>

입력 파일 요소를 숨기고 해당 입력 파일의 클릭 이벤트를 트리거하는 보이는 버튼을 만듭니다.

시도해 보기:

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();}
    );
});

저는 상위 두 가지 솔루션을 구현하려고 노력했지만, 결국 제게 엄청난 시간 낭비가 되었습니다.결국 이 .css 클래스를 적용하면 문제가 해결되었습니다...

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

끝! 아주 깨끗하고 아주 간단합니다.

그것은 매우 어려울 것입니다.파일 입력 유형의 문제는 일반적으로 두 개의 시각적 요소로 구성되는 반면 단일 DOM-요소로 취급된다는 것입니다.여기에 여러 브라우저가 파일 입력에 대한 독특한 외관과 느낌을 가지고 있으며 악몽을 꾸기 위한 준비가 되어 있습니다.파일 입력에 대한 특이점에 대해서는 quirksmode.org 에서 이 기사를 참조하십시오.그것이 당신을 행복하게 하지는 않을 것임을 장담합니다.

[편집]

사실은 입력한 내용을 컨테이너 요소(디브 같은)에 넣고 요소에 음의 마진을 추가하면 벗어날 수 있다고 생각합니다.텍스트 상자 부분을 화면 밖으로 효과적으로 숨깁니다.제가 링크한 기사의 기법을 사용하여 버튼처럼 스타일링을 해보는 것도 방법입니다.

모든 브라우저에서 작동하도록 수정 확인:

      <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에서 테스트를 해보았습니다. 잘 작동하고, 적용된 스타일도 :D

이것이 내 좋은 치료법입니다.

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

적어도 사파리에서는 통했습니다.

있는 그대로의 단순한.

이것을 하는 또 다른 쉬운 방법.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 fiddle입니다 :- http://jsfiddle.net/32na3/

위에서 추천해준 코드를 사용했고 몇시간동안 허리를 조여준 끝에 결국 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/>

이미지를 클릭하면 버튼 클릭 이벤트가 트리거되도록 이미지에 레이블을 지정할 수 있습니다.그냥 일반 버튼을 보이지 않게 만들 수 있습니다.

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

모든 브라우저에서 사용할 수 있었고, 사용하기도 매우 쉽습니다.

다음과 같이 숨겨진 파일 입력에 클릭 이벤트를 발송할 수 있습니다.

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

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();
        });
 });

이게 통하길 바라요 :)

이 HTML 코드는 Upload File(파일 업로드) 버튼만 표시됩니다.

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

입력 요소의 글꼴 불투명도를 0으로 지정할 수 있습니다.이렇게 하면 '파일 선택' 단추를 숨기지 않고 텍스트 필드를 숨깁니다.

자바스크립트가 필요 없고, IE 9까지 거슬러 올라가는 선명한 교차 브라우저

예.,

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

내가 이걸 해결해줄 수 있는...

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

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

문제는 텍스트 필드를 숨기고 있는 너비 속성이 브라우저마다, 윈도우 XP 테마마다 분명히 다르다는 것입니다.그래도 할 수 있는 일인가요?

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

예를 들어 텍스트 입력 배경이 흰색인 경우:

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

브라우저로 인해 파일 선택 텍스트는 여전히 검은색으로 표시됩니다.

이 파일 입력 버튼의 렌더 및 번역을 유지하면서 파일 입력 버튼만 표시하는 간단하고 해킹된 방법이 있습니다.

파일 입력 후에 표시되는 텍스트를 투명하게 표시하여 보이지 않게 만듭니다.

<input type="file" style="color: transparent" />

제 해결책은 "divveen"이 말한 것처럼 div 내에서 설정하는 것이지만, 저는 div에 제 자신의 버튼 스타일을 추가하고(a:div가 있는 버튼처럼 보이게) 입력에 "opacity:0;" 스타일을 설정할 뿐입니다.저한테 매력이 있네요, 당신에게도 그렇게 되길 바랍니다.

이것은 저에게 효과가 있습니다.

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

방금 입력파일을 가로:85px로 스타일링했는데 텍스트 필드가 아예 사라졌습니다.

<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;
});

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

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

다음은 모든 브라우저를 위한 최선의 방법입니다.

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>

이 모든 답변들은 귀엽지만, CSS는 브라우저와 기기 모두에서 같지 않기 때문에 작동하지 않을 것입니다. 제가 쓴 첫 번째 답변은 사파리를 제외한 모든 것에서 작동할 것입니다.모든 브라우저에서 항상 작동하려면 입력 텍스트를 지울 때마다 동적으로 생성되고 재생성되어야 합니다.

    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);

파이어폭스 v20에서는 테두리 너비로 플레이할 수 없다는 점을 제외하면 그들의 답변은 꽤 좋습니다.링크를 보면(여기서 실제로 표시할 수 없음) Firefox에서 font-size=23fps, transform:fps300fps, 0fps) scale(4)을 사용하여 문제를 해결했습니다.

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

여기에 몇 가지 유효한 옵션이 있지만 비슷한 문제를 해결하기 위해 생각해낸 것을 제공하려고 합니다.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);  
}

제가 쓴 글입니다.

<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도 없습니다.

다음은 모든 주요 브라우저에서 작동하는 @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" />

제이쿼리 코드

$(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;
}

숨겨진 "UploadButton" 클릭 트리거를 표준으로 서버 포스트백에 사용합니다."Upload File(파일 업로드)" 텍스트를 사용하면 래퍼 디브에서 입력 컨트롤이 오버플로우되면 보이지 않게 되므로 "파일 입력" 컨트롤 디브에 대한 스타일을 적용할 필요가 없습니다.$[id$="FileInput"] 선택기를 사용하면 표준 ASP를 사용하여 ID의 섹션을 구성할 수 있습니다.NET 접두사가 적용되었습니다.서버 코드에서 hdnFileName 뒤에 설정된 FilePath 텍스트 상자 값입니다.파일이 업로드되면 값.

언급URL : https://stackoverflow.com/questions/1084925/input-type-file-show-only-button