我是靠谱客的博主 害怕小海豚,最近开发中收集的这篇文章主要介绍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当中也在上传成功后对文本框和文件框中的值进行清零,以免出现最开始出现的一个文件传两次才能传上去的现象。

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

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

最后

以上就是害怕小海豚为你收集整理的jquery ajax上传文章且依靠点击其他按钮触发f o r m 表单中的file型的input框的全部内容,希望文章能够帮你解决jquery ajax上传文章且依靠点击其他按钮触发f o r m 表单中的file型的input框所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部