jQuery를 사용하여 <input type = 'file'/> 지우기


답변:


529

쉬움 : <form>요소 를 감싸고 폼에서 reset을 호출 한 다음을 사용하여 폼을 제거합니다 .unwrap(). .clone()이 스레드의 다른 솔루션 과 달리 마지막에는 동일한 요소 (설정된 사용자 정의 속성 포함)로 끝납니다.

Opera, Firefox, Safari, Chrome 및 IE6 +에서 테스트 및 작동 을 제외한 다른 유형의 양식 요소에서도 작동합니다 type="hidden".

window.reset = function(e) {
  e.wrap('<form>').closest('form').get(0).reset();
  e.unwrap();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<form>
  <input id="file" type="file">
  <br>
  <input id="text" type="text" value="Original">
</form>

<button onclick="reset($('#file'))">Reset file</button>
<button onclick="reset($('#text'))">Reset text</button>

JSFiddle

아래의 Timo 메모에서 알 수 있듯이의 내부 필드 재설정을 트리거하는 버튼이있는 경우 제출을 트리거 하지 않도록 이벤트를 <form>호출해야합니다 ..preventDefault()<button>


편집하다

수정되지 않은 버그로 인해 IE 11에서 작동하지 않습니다. 입력시 텍스트 (파일 이름)가 지워지지 만 File목록은 채워져 있습니다.


14
우승자! 모든 브라우저에서 작동하며 입력 필드 복제를 피합니다. 그러나 지우기 버튼이 양식 안에 있으면 reset()예를 들어 이름 을 바꾸십시오 . reset2()Chrome에서는 적어도 모든 입력란이 지워지기 때문에 지워집니다 reset(). 그리고 제출을 막기 위해 호출을 지운 후에 event.preventDefault ()를 추가하십시오. 이런 식으로 : <button onclick="reset2($('#file'));event.preventDefault()">Reset file</button>. 작업 예 : jsfiddle.net/rPaZQ/23 .
Timo Kähkönen 2016 년

28
문제는 적어도 일시적으로 문서가 유효하지 않다는 것입니다. (양식은 다른 양식을 포함 할 수 없습니다.) 현재 작동하는지 여부에 관계없이 원하는 시간에 언제든지 중단 할 수 있습니다.
cHao

6
@cHao, 물론 이것은 입력 요소가 실제로는 형태가 아닌 경우에만 사실입니다.
Ninjakannon

7
양식 내에 양식을 갖는 것과 관련하여 항상 DOM 외부에 새 양식 요소를 작성하거나 원하는 경우 본문에 추가 한 다음 입력 요소를 해당 양식 내부로 이동할 수 있습니다. 그런 다음 새 양식을 재설정하고 입력 요소를 원래 위치로 다시 이동 한 다음 추가 양식 요소를 제거하십시오.
Kevin Heidt

4
방금 IE 11에서 작동하지 않는다는 것을 알았습니다. 우리는이 접근법을 사용하는 PixelFileInput을 사용하고 있습니다. 텍스트와 썸네일을 취소 동안, 개체의 파일 목록 :( 동일하게 유지
이안 그레인저에게

434

빠른 답변 : 교체하십시오.

아래 코드에서 replaceWithjQuery 메서드를 사용 하여 컨트롤을 자체 복제본으로 바꿉니다. 이 컨트롤의 이벤트에 바인딩 된 핸들러가있는 경우 해당 핸들러도 보존해야합니다. 이를 위해 메소드 true의 첫 번째 매개 변수로 전달 합니다 clone.

<input type="file" id="control"/>
<button id="clear">Clear</button>
var control = $("#control");

$("#clear").on("click", function () {
    control.replaceWith( control = control.clone( true ) );
});

피들 : http://jsfiddle.net/jonathansampson/dAQVM/

이벤트 핸들러를 유지하면서 복제하는 경우 이벤트 위임을 사용하여 상위 요소에서이 제어에 대한 클릭을 처리하는 데 고려할 수있는 문제가있는 경우 :

$("form").on("focus", "#control", doStuff);

따라서 컨트롤을 새로 고칠 때 처리기와 요소를 복제 할 필요가 없습니다.


50
$ ( '# clone'). replaceWith ($ (this) .clone ()) 필드에서 .clone () 메서드를 사용할 수도 있습니다.
metric152

4
방화범에는 오류가 없습니다. control.val ( '')을 추가해야했습니다. 파일 입력 상자를 지우십시오. 코드는 크롬과 ie9에서 그대로 작동했습니다.
mnsr

10
여전히 작동하지 않습니다. 교체하기 전에 지워야합니다. 따라서 .replaceWith () 전에 .val ()을 원할 것입니다. 따라서 control.val ( ''). replaceWith (...);
mnsr December

6
그 아래의 솔루션이보다 훨씬 더 깨끗있어 : stackoverflow.com/a/13351234/909944
slipheed

2
이 답변은 역사적인 이유로 여기에 있습니다. 최신 브라우저 지원input.value = null;
André Werlang

113

Jquery는 크로스 브라우저 / 이전 브라우저 문제를 처리해야합니다.

이것은 내가 테스트 한 최신 브라우저에서 작동합니다 : Chromium v25, Firefox v20, Opera v12.14

jquery 1.9.1 사용

HTML

<input id="fileopen" type="file" value="" />
<button id="clear">Clear</button>

jquery

$("#clear").click(function () {
    $("#fileopen").val("");
});

jsfiddle

다음 자바 스크립트 솔루션은 위의 브라우저에서 저에게 효과적이었습니다.

document.getElementById("clear").addEventListener("click", function () {
    document.getElementById("fileopen").value = "";
}, false);

jsfiddle

IE로 테스트 할 방법이 없지만 이론적으로는 작동합니다. MS가 다른 방식으로 수행했기 때문에 IE가 Javascript 버전이 작동하지 않을만큼 충분히 다른 경우 jquery 메소드는 귀하를 대신하여 처리해야합니다. 그렇지 않으면 jquery 팀과 함께 jquery 팀을 지적 할 가치가 있습니다. IE가 요구하는 방법. ( "IE에서는 작동하지 않을 것"이라고 말하는 사람들이 있지만 IE에서 작동하는 방식을 보여주는 바닐라 자바 ​​스크립트 (아마도 "보안 기능"?)는없는 것으로 보입니다. 아마도 MS에게도 버그로보고 할 것입니다. 최신 릴리스에서 수정되도록))

다른 답변에서 언급했듯이 jquery 포럼 의 게시물

 if ($.browser.msie) {
      $('#file').replaceWith($('#file').clone());
 } else {
      $('#file').val('');
 }

그러나 jquery는 이제 브라우저 테스트 jquery.browser에 대한 지원을 제거 했습니다.

이 자바 스크립트 솔루션도 저에게 효과적이었습니다 .jquery.replaceWith 메소드 와 동일한 바닐라 입니다.

document.getElementById("clear").addEventListener("click", function () {
    var fileopen = document.getElementById("fileopen"),
        clone = fileopen.cloneNode(true);

    fileopen.parentNode.replaceChild(clone, fileopen);
}, false);

jsfiddle

중요한 점은 cloneNode 메소드가 연관된 이벤트 핸들러를 보존하지 않는다는 것입니다.

이 예를 참조하십시오.

document.getElementById("fileopen").addEventListener("change", function () {
    alert("change");
}, false);

document.getElementById("clear").addEventListener("click", function () {
    var fileopen = document.getElementById("fileopen"),
        clone = fileopen.cloneNode(true);

    fileopen.parentNode.replaceChild(clone, fileopen);
}, false);

jsfiddle

그러나 jquery.clone 은 이것을 제공합니다 [* 1]

$("#fileopen").change(function () {
    alert("change");
});

$("#clear").click(function () {
    var fileopen = $("#fileopen"),
        clone = fileopen.clone(true);

    fileopen.replaceWith(clone);
});

jsfiddle

[* 1] 그것의 사본 유지로 이벤트가 jQuery의 방법으로 추가 된 경우 JQuery와이 작업을 수행 할 수 jquery.data을 그것은 속임수의 비트, 그래서 그것을, 그렇지 않으면 작동하지 않습니다 / 해결 방법과 수단 일이 아니다 다른 방법이나 라이브러리간에 호환됩니다.

document.getElementById("fileopen").addEventListener("change", function () {
    alert("change");
}, false);

$("#clear").click(function () {
    var fileopen = $("#fileopen"),
        clone = fileopen.clone(true);

    fileopen.replaceWith(clone);
});

jsfiddle

첨부 된 이벤트 핸들러를 요소 자체에서 직접 가져올 수 없습니다.

여기에 바닐라 자바 ​​스크립트의 일반적인 원칙이 있습니다. 이것은 다른 모든 라이브러리에서 jquery가 수행하는 방식입니다.

(function () {
    var listeners = [];

    function getListeners(node) {
        var length = listeners.length,
            i = 0,
            result = [],
            listener;

        while (i < length) {
            listener = listeners[i];
            if (listener.node === node) {
                result.push(listener);
            }

            i += 1;
        }

        return result;
    }

    function addEventListener(node, type, handler) {
        listeners.push({
            "node": node,
                "type": type,
                "handler": handler
        });

        node.addEventListener(type, handler, false);
    }

    function cloneNode(node, deep, withEvents) {
        var clone = node.cloneNode(deep),
            attached,
            length,
            evt,
            i = 0;

        if (withEvents) {
            attached = getListeners(node);
            if (attached) {
                length = attached.length;
                while (i < length) {
                    evt = attached[i];
                    addEventListener(clone, evt.type, evt.handler);

                    i += 1;
                }
            }
        }

        return clone;
    }

    addEventListener(document.getElementById("fileopen"), "change", function () {
        alert("change");
    });

    addEventListener(document.getElementById("clear"), "click", function () {
        var fileopen = document.getElementById("fileopen"),
            clone = cloneNode(fileopen, true, true);

        fileopen.parentNode.replaceChild(clone, fileopen);
    });
}());

jsfiddle

물론 jquery와 다른 라이브러리에는 그러한 목록을 유지하는 데 필요한 다른 모든 지원 방법이 있습니다. 이것은 단지 시연입니다.


작동합니다! (이 답변의 시작 부분에서 적어도 바닐라 JS 비트). 최신 Chrome, Firefox 및 IE (11)에서 이것을 테스트했습니다.
PhilT

4
나는 당신의 동일한 답변 중 일부를 추가하려고했지만 주로 그 .val(''). 업로드 요소를 복제하거나 중첩 양식을 추가하는 것보다 간단하지 않습니까? +1.
Erenor Paz

3
을 사용하는 첫 번째 JQuery 솔루션 .val("")은 완벽하게 작동했습니다. 입력을 복제하고 교체하는 것보다 훨씬 간단합니다.
Hugo Zink

51

명백한 보안상의 이유로 파일 입력 값을 빈 문자열로 설정할 수 없습니다.

필드가있는 양식을 재설정하거나 다른 필드가 포함 된 양식의 파일 입력 만 재설정하려면 다음을 사용하십시오.

function reset_field (e) {
    e.wrap('<form>').parent('form').trigger('reset');
    e.unwrap();
}​

예를 들면 다음과 같습니다. http://jsfiddle.net/v2SZJ/1/


6
IE에서 제대로 작동하지 않습니다. 시각적으로 값이 재설정되지만 el.value는 여전히 이전 버전을보고합니다. el.value를 재설정하는 데 도움이되지만 IE10 이상에서만 가능합니다. jsfiddle.net/9uPh5/2
그레고르

2
위와 동일한 솔루션
PhilT

2
그것은 틀 렸습니다. 우리는 주어진 값으로 필드를 설정할 수 없지만 희망적으로 그것을 지울 수 있습니다.
fralbo


20

IE8에서는 보안을 위해 파일 업로드 필드를 읽기 전용으로 만들었습니다. IE 팀 블로그 게시물을 참조하십시오 .

역사적으로 HTML 파일 업로드 컨트롤 ()은 수많은 정보 유출 취약점의 원인이었습니다. 이러한 문제를 해결하기 위해 컨트롤의 동작이 두 가지로 변경되었습니다.

사용자가 컨트롤에 로컬 파일 경로를 입력하도록 속이는 "스틸 링"키 입력에 의존하는 공격을 차단하기 위해 이제 파일 경로 편집 상자가 읽기 전용입니다. 파일 찾아보기 대화 상자를 사용하여 업로드 할 파일을 명시 적으로 선택해야합니다.

또한 인터넷 영역에 대해 "파일을 업로드 할 때 로컬 디렉토리 경로 포함"URLAction이 "사용 안 함"으로 설정되었습니다. 이 변경은 잠재적으로 민감한 로컬 파일 시스템 정보가 인터넷으로 유출되는 것을 방지합니다. 예를 들어, 전체 경로 C : \ users \ ericlaw \ documents \ secret \ image.png를 제출하지 않고 Internet Explorer 8은 이제 파일 이름 image.png 만 제출합니다.


16

$("#control").val('')당신이 필요한 전부입니다! JQuery 1.11을 사용하여 Chrome에서 테스트

다른 사용자도 Firefox에서 테스트했습니다.


2
여기에 다른 많은 게시물이 설명 하듯이, 이것은 브라우저 친화적이지 않습니다.
Tisch

어떤 브라우저가 실패하는지 이해하기 위해?
TheHamstring

1
IE에서 입력 유형 파일이 읽기 전용이므로 Internet Explorer에서 실패 함>
Lucky

4
크롬과 파이어 폭스에서 작동합니다. 충분합니다.
naimul64

12

나는 여기에 모든 옵션이 붙어 있습니다. 내가 만든 해킹은 다음과 같습니다.

<form>
 <input type="file">
 <button type="reset" id="file_reset" style="display:none">
</form>

다음과 유사한 코드로 jQuery를 사용하여 재설정을 트리거 할 수 있습니다.

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

(jsfiddle : http://jsfiddle.net/eCbd6/ )


3
알았지 만 그것은 전체 양식을 지울 것입니다. 특정 파일 입력이 아님
Ashish Ratan

8

나는 이것으로 끝났다.

if($.browser.msie || $.browser.webkit){
  // doesn't work with opera and FF
  $(this).after($(this).clone(true)).remove();  
}else{
  this.setAttribute('type', 'text');
  this.setAttribute('type', 'file'); 
}

가장 우아한 해결책은 아니지만 내가 알 수있는 한 작동합니다.



크롬 34 (리눅스)에서는 작동하지 않습니다. 두 브라우저에서 replaceWith () 메소드 작업 (크롬, 파이어 폭스)
Gaurav Sharma는

처음에는 "$ .browser가 jquery 1.9에서 제거되었습니다"라는 것을 알아야하지만 마지막 두 줄 (유형 속성을 텍스트로 변경 한 다음 파일로 다시 설정)이 작동했습니다. 또한 나는 $ ( '# control'). val ( ''); 또는 자바 스크립트에서 document.getElementById (control) .value = ''; 그리고 우리도이 접근법을 사용해서는 안되는 이유를 모릅니다!? 마지막으로 두 가지를 모두 사용하기로 결정했습니다.
QMaster

8

https://github.com/malsup/form/blob/master/jquery.form.js 를 사용 했습니다.이 기능 clearInputs()은 크로스 브라우저, 테스트가 쉽고 사용하기 쉽고 IE 문제 및 숨겨진 필드 지우기 필요한 경우. 파일 입력 만 지우는 약간 긴 솔루션 일 수 있지만 크로스 브라우저 파일 업로드를 처리하는 경우이 솔루션을 사용하는 것이 좋습니다.

사용법은 쉽습니다 :

// 모든 파일 필드를 지 웁니다.
$ ( "input : file"). clearInputs ();

// 숨겨진 필드도 지 웁니다.
$ ( "input : file"). clearInputs (true);

// 특정 필드를 지 웁니다.
$ ( "# myfilefield1, # ​​myfilefield2"). clearInputs ();
/ **
 * 선택한 양식 요소를 지 웁니다.
 * /
$ .fn.clearFields = $ .fn.clearInputs = function (includeHidden) {
    var re = / ^ (?: color | date | datetime | email | month | number | password | range | search | tel | text | time | url | week) $ / i; // 'hidden'이이 목록에 없습니다
    이것을 돌려줍니다 .each (function () {
        var t = this.type, tag = this.tagName.toLowerCase ();
        if (re.test (t) || tag == 'textarea') {
            this.value = '';
        }
        그렇지 않으면 (t == 'checkbox'|| t == 'radio') {
            this.checked = 거짓;
        }
        그렇지 않으면 (tag == 'select') {
            this.selectedIndex = -1;
        }
        그렇지 않으면 (t == "file") {
            if (/MSIE/.test(navigator.userAgent)) {
                $ (this) .replaceWith ($ (this) .clone (true));
            } else {
                $ (this) .val ( '');
            }
        }
        else if (includeHidden) {
            // includeHidden은 true 값이거나 선택자 문자열 일 수 있습니다.
            // 특별한 테스트를 나타냅니다. 예를 들면 다음과 같습니다.
            // $ ( '# myForm'). clearForm ( '. special : hidden')
            // 위의 내용은 'special'클래스가있는 숨겨진 입력을 정리합니다.
            if ((includeHidden === true && /hidden/.test(t)) ||
                 (typeof includeHidden == 'string'&& $ (this) .is (includeHidden)))
                this.value = '';
        }
    });
};

왜이 답변이 더 많이지지되지 않는지 이해가되지 않습니까?!
AlexB

1
@AlexB : Timo가 설명했듯이 하나의 파일 입력 필드를 지우는 것만으로도 과도합니다.
TheCarver

그 일을하지만 더 이상 :( FF 45.0.2에 알고하지 마십시오
fralbo

5

파일 입력 값은 읽기 전용입니다 (보안상의 이유로). 해당 필드보다 넓은 범위를 갖는 폼의 reset () 메서드를 호출하는 것 외에는 프로그래밍 방식으로 비워 둘 수 없습니다.


16
혼란스러워-$ ( "# inputControl"). val ( "")을 시도했지만 실제로 필드를 비 웠습니다. 뭔가 빠졌습니까?
Sampson

1
@Jonathan, 나에게도 효과가 있지만 다른 것으로 설정하면 보안 오류입니다. FF4에서 테스트되었습니다.
Brenden

reset ()은 JS 기본 메소드이므로 jQuery를 통해 양식을 선택하면 jQuery 범위에서 요소를 가져와야합니다. $ ( "form # myForm") [0] .reset ();
Chris Stephens

4
@Jonathan 그것은 당신이 IE에서하지 않았기 때문에 당신을 위해 작동합니다. 이 보안 문제는 IE 만 중지되는 문제입니다. 정기적으로 값을 지우면 IE 크롬과 파이어 폭스 모두에서 작동하지만,하지
VoidKing

5

다음 코드로 작업 할 수있었습니다.

var input = $("#control");    
input.replaceWith(input.val('').clone(true));

5

HTML 파일 입력을 지우는 간단하고 깨끗한 방법을 찾고 있었지만 위의 답변은 훌륭하지만 웹에서 간단하고 우아한 방법으로 나올 때까지는 아무도 내가 원하는 것을 대답하지 않습니다.

var $input = $("#control");

$input.replaceWith($input.val('').clone(true));

모든 크레딧은 Chris Coyier 에게갑니다 .

// Referneces
var control = $("#control"),
    clearBn = $("#clear");

// Setup the clear functionality
clearBn.on("click", function(){
    control.replaceWith( control.val('').clone( true ) );
});

// Some bound handlers to preserve when cloning
control.on({
    change: function(){ console.log( "Changed" ) },
     focus: function(){ console.log(  "Focus"  ) }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="file" id="control">
<br><br>
<a href="#" id="clear">Clear</a>


4

.clone()것은 않습니다 하지 오페라 (및 기타) 작동합니다. 내용을 유지합니다.

나에게 가장 가까운 방법은 Jonathan의 초기 방법이지만 필자의 경우 필드가 지저분한 코드를 위해 만들어진 이름, 클래스 등을 보존했습니다.

이와 같은 것이 잘 작동 할 수 있습니다 (Quentin에게도 감사드립니다).

function clearInput($source) {
    var $form = $('<form>')
    var $targ = $source.clone().appendTo($form)
    $form[0].reset()
    $source.replaceWith($targ)
}

이것이 모든 주요 브라우저에서 테스트 되었습니까?
Shawn

최신 버전의 Chrome / FF / Opera 및 IE8에서 제대로 작동하는 것 같습니다. 왜 아무것도 작동하지 않는 이유를 알 수 없습니다. 양식의 재설정 옵션은 오랫동안 사용되었습니다.
SpoonNZ

4

다음을 사용 하여이 작업을 수행했습니다 ...

function resetFileElement(ele) 
{
    ele.val(''); 
    ele.wrap('<form>').parent('form').trigger('reset');   
    ele.unwrap();
    ele.prop('files')[0] = null;
    ele.replaceWith(ele.clone());    
}

이것은 IE10, FF, Chrome & Opera에서 테스트되었습니다.

두 가지 경고가 있습니다 ...

  1. FF에서 여전히 제대로 작동하지 않습니다. 페이지를 새로 고치면 파일 요소가 선택한 파일로 다시 채워집니다. 이 정보를 얻는 곳은 저 너머입니다. 파일 입력 요소와 관련하여 무엇을 지우려고 할 수 있습니까?

  2. 파일 입력 요소에 첨부 한 모든 이벤트에 대해 위임을 사용해야하므로 복제가 수행 될 때 여전히 작동합니다.

내가 이해할 수없는 것은 지구상의 사용자가 허용 할 수없는 잘못된 파일 선택에서 입력 필드를 지우지 못하게하는 것이 좋은 생각이라고 생각합니다.

좋아, 동적으로 값을 설정하여 사용자의 OS에서 파일을 침출 할 수는 없지만 전체 양식을 재설정하지 않고 유효하지 않은 선택을 지우도록하겠습니다.

'수락'은 어쨌든 필터 이외의 다른 일을하는 것과 같지 않으며 IE10에서는 MS Word 마임 유형을 이해하지 못하기 때문에 농담입니다!


이것은 거의 작동합니다. Firefox에서이 작업을 수행하기 위해 수행해야 할 한 가지는 .pop()파일 배열을 null로 설정하는 대신 파일 배열 에서 사용 하는 것입니다. 이것은 파일을 올바르게 지우는 것 같습니다.
kmacdonald

2

내 Firefox 40.0.3에서만이 작업을 수행

 $('input[type=file]').val('');
 $('input[type=file]').replaceWith($('input[type=file]').clone(true));

1
$ ( 'input [type = file]'). replaceWith ($ ( 'input [type = file]'). clone (true) .val ( ''));
Andrei

2

모든 브라우저에서 저에게 효과적입니다.

        var input = $(this);
        var next = this.nextSibling;
        var parent = input.parent();
        var form = $("<form></form>");
        form.append(input);
        form[0].reset();
        if (next) {
            $(next).before(input);
        } else {
            parent.append(input);
        }

1

사용자가 언급 한 대부분의 기술로 시도했지만 모든 브라우저에서 작동하지는 않았습니다. 즉, 파일 입력의 경우 FF에서 clone ()이 작동하지 않습니다. 파일 입력을 수동으로 복사 한 다음 원본을 복사 한 것으로 바꿨습니다. 모든 브라우저에서 작동합니다.

<input type="file" id="fileID" class="aClass" name="aName"/>

var $fileInput=$("#fileID");
var $fileCopy=$("<input type='file' class='"+$fileInput.attr("class")+" id='fileID' name='"+$fileInput.attr("name")+"'/>");
$fileInput.replaceWith($fileCopy);

0

$("input[type=file]").wrap("<div id='fileWrapper'/>");
$("#fileWrapper").append("<div id='duplicateFile'   style='display:none'>"+$("#fileWrapper").html()+"</div>");
$("#fileWrapper").html($("#duplicateFile").html());

1
안녕 니라 즈. 어서 오십시오. 이 답변은 정확할 수도 있지만 설명이 필요할 수도 있습니다.
tomfanning

0

Chrome, FF 및 Safari에서 작동합니다.

$("#control").val("")

IE 또는 Opera에서 작동하지 않을 수 있습니다


1
OP의 문제와 거의 동일하게 보임
Trindaz

1
ecmascript 표준이 아니며 입력 유형 파일의 값은 보안상의 이유로 보호 특성입니다.
e-info128

0

비동기식으로 만들고 버튼의 원하는 작업이 완료된 후 재설정하십시오.

    <!-- Html Markup --->
    <input id="btn" type="file" value="Button" onchange="function()" />

    <script>
    //Function
    function function(e) {

        //input your coding here           

        //Reset
        var controlInput = $("#btn");
        controlInput.replaceWith(controlInput = controlInput.val('').clone(true));
    } 
    </script>

0
function clear() {
    var input = document.createElement("input");
    input.setAttribute('type', 'file');
    input.setAttribute('value', '');
    input.setAttribute('id', 'email_attach');

    $('#email_attach').replaceWith( input.cloneNode() );
}

0

그것은 나를 위해 작동하지 않습니다 :

$('#Attachment').replaceWith($(this).clone());
or 
$('#Attachment').replaceWith($('#Attachment').clone());

그래서 asp mvc에서는 파일 입력을 대체하기 위해 면도기 기능을 사용합니다. 먼저 Id와 Name을 사용하여 입력 문자열에 대한 변수를 만든 다음 페이지에 표시하고 재설정 버튼을 클릭하여 바꾸십시오.

@{
    var attachmentInput = Html.TextBoxFor(c => c.Attachment, new { type = "file" });
}

@attachmentInput

<button type="button" onclick="$('#@(Html.IdFor(p => p.Attachment))').replaceWith('@(attachmentInput)');">--</button>

0

쉬운 방법은 입력 유형을 변경하고 다시 변경하는 것입니다.

이 같은:

var input = $('#attachments');
input.prop('type', 'text');
input.prop('type', 'file')

-1

이렇게 복제본으로 바꿀 수 있습니다

var clone = $('#control').clone();

$('#control').replacewith(clone);

하지만이 값도 복제해서

var emtyValue = $('#control').val('');
var clone = emptyValue.clone();

$('#control').replacewith(clone);

-4

쉬운 롤입니다 (오페라를 제외한 모든 브라우저에서 작동) :

$('input[type=file]').each(function(){
    $(this).after($(this).clone(true)).remove();
});

JS 피들 : http://jsfiddle.net/cw84x/1/


나는 오페라에 대해 덜 신경 쓰지 않았다. 당신이 관심이 있다면 그냥 양식에 싸서. 나는 개인적으로 상관하지 않으며 내 방법을 사용할 것입니다.
익명

2
이것은 좋은 대답은 아니지만 주된 문제는 정말 나쁜 태도였습니다.
Sam P

-5

뭐? 유효성 검사 기능에서

document.onlyform.upload.value="";

업로드가 이름이라고 가정합니다.

<input type="file" name="upload" id="csv_doc"/>

JSP를 사용하고 있습니다. 차이가 있는지 확실하지 않습니다 ...

저에게 효과적이며 더 쉽다고 생각합니다.

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