[javascript] jQuery 트리거 파일 입력

jQuery를 사용하여 업로드 상자 (찾아보기 버튼)를 트리거하려고합니다.
내가 지금 시도한 방법은 다음과 같습니다.

$('#fileinput').trigger('click');   

그러나 작동하지 않는 것 같습니다. 도와주세요. 감사합니다.



답변

이것은 보안 제한 때문입니다.

보안 제한이 또는로 <input type="file"/>설정된 경우에만 보안 제한이 있음을 알았습니다 .display:none;visbilty:hidden

내가 설정하여 뷰포트 외부로의 위치를 시도 그래서 position:absolutetop:-100px;봐라 그것을 작동합니다.

http://jsfiddle.net/DSARd/1/ 참조

그것을 핵이라고 부릅니다.

희망이 당신을 위해 작동합니다.


답변

이것은 나를 위해 일했다 :

JS :

$('#fileinput').trigger('click'); 

HTML :

<div class="hiddenfile">
  <input name="upload" type="file" id="fileinput"/>
</div>

CSS :

.hiddenfile {
 width: 0px;
 height: 0px;
 overflow: hidden;
}

>>> Cross-Browser를 작동시키는 다른 것 : <<<

아이디어는 사용자 정의 버튼 위에 보이지 않는 거대한 “찾아보기”버튼을 오버레이한다는 것입니다. 따라서 사용자가 사용자 정의 버튼을 클릭하면 실제로 기본 입력 필드의 “찾아보기”버튼을 클릭합니다.

JS 피들 : http://jsfiddle.net/5Rh7b/

HTML :

<div id="mybutton">
  <input type="file" id="myfile" name="upload"/>
  Click Me!
</div>

CSS :

div#mybutton {

  /* IMPORTANT STUFF */
  overflow: hidden;
  position: relative;

  /* SOME STYLING */
  width:  50px;
  height: 28px;
  border: 1px solid green;
  font-weight: bold
  background: red;
}

div#mybutton:hover {
  background: green;
}

input#myfile {
  height: 30px;
  cursor: pointer;
  position: absolute;
  top: 0px;
  right: 0px;
  font-size: 100px;
  z-index: 2;

  opacity: 0.0; /* Standard: FF gt 1.5, Opera, Safari */
  filter: alpha(opacity=0); /* IE lt 8 */
  -ms-filter: "alpha(opacity=0)"; /* IE 8 */
  -khtml-opacity: 0.0; /* Safari 1.x */
  -moz-opacity: 0.0; /* FF lt 1.5, Netscape */
}

자바 스크립트 :

$(document).ready(function() {
    $('#myfile').change(function(evt) {
        alert($(this).val());
    });
});


답변

LABEL 요소 ex를 사용할 수 있습니다.

<div>
    <label for="browse">Click Me</label>
    <input type="file" id="browse" name="browse" style="display: none">//
</div>

이것은 입력 파일을 트리거합니다


답변

IE8 +, 최근 FF 및 크롬에서 작동 (= 테스트 됨)했습니다.

$('#uploadInput').focus().trigger('click');

클릭을 발생시키기 전에 키가 초점을 맞추고 있습니다 (그렇지 않으면 크롬은 무시합니다).

참고 : 입력을 표시하고 볼 수 있도록 (필요하지 않은 display:none, 그렇지 않은 visibility:hidden) 필요합니다. 나는 (다른 많은 사람들과 마찬가지로) 입력을 절대적으로 배치하고 화면에서 버릴 것을 제안합니다.

#uploadInput {
    position: absolute;
    left: -9999px;
}


답변

내 바이올린을 확인하십시오.

http://jsfiddle.net/mohany2712/vaw8k/

.uploadFile {
  visibility: hidden;
}

#uploadIcon {
  cursor: pointer;
}
<body>
  <div class="uploadBox">
    <label for="uploadFile" id="uploadIcon">
      <img src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/34/Icon_-_upload_photo_2.svg/512px-Icon_-_upload_photo_2.svg.png"  width="20px" height="20px"/>
    </label>
    <input type="file" value="upload" id="uploadFile" class="uploadFile" />
  </div>
</body>


답변

adardesign 은 숨겨 졌을 때 무시되는 파일 입력 요소와 관련하여 문제를 해결했습니다. 또한 많은 사람들이 요소 크기를 0으로 옮기거나 위치 지정 및 오버플로 조정으로 범위를 벗어난 것을 알았습니다. 이것들은 모두 훌륭한 아이디어입니다.
완벽하게 잘 작동하는 다른 방법 은 불투명도를 0으로 설정하는 것 입니다. 그런 다음 항상 숨기 듯이 다른 요소를 오프셋 하지 않도록 위치를 설정할 수 있습니다 . 거의 모든 방향으로 거의 10K 픽셀의 요소를 이동할 필요가 없습니다.

다음은 하나를 원하는 사람들을위한 작은 예입니다.

input[type='file']{
    position:absolute;
    opacity:0;
    /* For IE8 "Keep the IE opacity settings in this order for max compatibility" */
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
    /* For IE5 - 7 */
    filter: alpha(opacity=0);
}


답변

호기심을 위해 업로드 양식과 입력 파일을 DOM 트리에 추가하지 않고 동적으로 작성하여 원하는 방식으로 작업을 수행 할 수 있습니다.

$('.your-button').on('click', function() {
    var uploadForm = document.createElement('form');
    var fileInput = uploadForm.appendChild(document.createElement('input'));

    fileInput.type = 'file';
    fileInput.name = 'images';
    fileInput.multiple = true;

    fileInput.click();
});

uploadForm을 DOM에 추가 할 필요가 없습니다.