Eu crio um código HTML e jQuery para enviar um formulário com jQuery e ele funciona em todos os navegadores, exceto no Internet Explorer.
HTML:
<form name="file_upload" id="file_upload" action="<?php echo base_url(); ?>projects/file" enctype="multipart/form-data" method="POST">
<a class="button" onclick="document.getElementById("file-upload-input").click(); return false;"><span class="plus"></span>Upload File</a>
<input id="file-upload-input" name="upload" type="file" style="display:none;">
<input id="submit-button" name="submit" type="submit" value="Upload" style="display:none;">
</form>
jQuery
$(document)
.on("change", "#file-upload-input", function(){
$("#submit-button").click();
})
EDITAR: Eu também tentei:
$(document)
.on("change", "#file-upload-input", function(){
$("#file_upload").submit();
})
Mas o envio de entrada não enviou um formulário apenas no Internet Explorer.
Respostas:
1 para resposta № 1Tente isso.
$(document)
.on("change", "#file-upload-input", function(){
$("#file_upload").submit();
})
1 para resposta № 2
Mudando:
$("#submit-button").click();
para:
$("#file_upload").submit();
deve fazer o truque.
1 para resposta № 3
Você pode ter problemas ao usar a abordagem de eventos delegados com o evento "change" no IE (já que ele não suporta borbulhamento que a delegação de eventos depende).
Tente ligar o manipulador onchange diretamente à entrada do arquivo:
$("#file-upload-input").on("change", function(){
$("#file_upload").submit();
})
1 para resposta № 4
Eu acho que é a entrega do evento que limita algunsoperação que disparou por javascript. Então você deve sempre usar o evento original que é acionado pelo navegador, No seu caso, podemos usar o css para fazer a entrada de upload do arquivo para transparente e cobrimos o botão "a":
<input id="file-upload-input" name="upload" type="file" style="
width: 88px;
position: absolute;
left: 0;
opacity: 0;
filter:alpha(opacity=0)
">
Se isto funcionar, você pode deletar o evento onclick que está ligado ao nó "a"