jquery ajax上传文章且依靠点击其他按钮触发f o r m 表单中的file型的input框

   小小普罗格瑞姆(programmer)做的一些笔记,有错还请各位大神批评指正。

  今天完成了一个前端中出现的问题,这几天在完成实验室里的一个项目时遇到这样一个有意思的问题,我也摸索出了一个解决办法。我们在用ssm框架中,SpringMVC中经常使用到的就是form表单中加上input框来完成上传任务就像这样。

<form action="/uploadMaterial.action" method="post" enctype="multipart/form-data">
    <input type="file" name="mf">
    <input type="submit" value="上传">
</form>
  但是这里如果涉及到要用ajax控制住页面不跳转,只是局部进行刷新,那么这个方法就行不通了。这里提供一个方法:

  在前端还是一样设置一个隐藏的form表单,以及其中某些值也是隐藏的:

<form id="upLoadfile" enctype="multipart/form-data" hidden>
    <input type="file" name="mf" id="mf" style="display:none" multiple>
    <input type="text" id="filename">
    <input type="text" name="id" id="id" hidden>
</form>
  这里还涉及到一个id,这个是为了后面对这个文章的其他属性的需要,这里的id是为了告诉后面这个文章是谁上传的,一个用户id。

  我们最后想达到的一个效果就是点击其他按钮,能够触发点击这个input框类型为fie的效果一样。我们给出这样一个js中的函数

function openBrowse(){
    var ie=navigator.appName=="Microsoft Internet Explorer" ? true : false;
    if(ie){
        document.getElementById("mf").click();
        document.getElementById("filename").value=document.getElementById("mf").value;
    }else{
        var a=document.createEvent("MouseEvents");//FF的处理
        a.initEvent("click", true, true);
        document.getElementById("mf").dispatchEvent(a);
        document.getElementById("filename").value=document.getElementById("mf").value;
        alert("请上传文件");
        setTimeout("upLoadDocument()",1000);
    }
}
  然后其中用到的upLoadDocument的代码如下:
//上传文档以此触发ajax提交
function upLoadDocument() {
    alert(userId);
    $("#id").val(userId);
    var urlRootContext= getRootContext();
    $("#upLoadfile").ajaxSubmit({
        type:"POST",
        url:urlRootContext+"/api/doc/uploadDocument",
        contentType:"application/x-www-form-urlencoded;charset=utf-8",
        dataType:"json",
        success:function (data) {
            console.log(data);
            alert("上传成功~");
            document.getElementById("filename").value="";
            document.getElementById("mf").value="";
        },
        error:function (data) {
            console.log(data);

        }
    })

}
  当然要用这里面的ajaxSubmit要引入一个js包


  
  界面如下,当我点击导入时:

就会触发效果:



  但是一直有个问题,就是

对于这一行代码,当我这里出发了这个点击事件时,他还没等我选文件,他就开始运行upLoadDocument功能,如果我这里不用一个setTimeout去控制时间,那么他就直接执行上传功能了,就会报错,因为根本就没有赋值。所以我这里只好用一个alert去控制这个代码,在客户选择好文件后再去点击alert里面的确定,以免出现还没选择文件就已经执行上传功能这种现象,然后在upLoad当中也在上传成功后对文本框和文件框中的值进行清零,以免出现最开始出现的一个文件传两次才能传上去的现象。

  这个一步步的调才能看到效果。

  不知道各位大神有没有更好的办法呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值