最近使用jQuery给页面dom添加div及函数,上传图片的函数,添加并移除后,函数依旧被记忆,如果你执行同一个函数时,则会同时执行两次!
如下,使用ajax给页面添加HTML及函数:
function get_fields(tid,id){ var id = arguments[1]?arguments[1]:0; $.post("{fun U('common/get_fields')}",{molds:$("#molds").val(),tid:tid,id:id},function(res){ if(res.code==0){ $("#fields_ext").html(res.tpl); } },'json'); }
添加进来的函数如:
<div class="form-control"> <label for="">商品图集:</label> <span class="view_img_pictures"></span><br> <input name="pictures" type="hidden" id="pictures" value=""><br> <input type="file" class="upload_input_pictures" file-name="file_pictures" name="file_pictures[]" multiple="multiple" id="upload_input_pictures"> </div> <script type="text/javascript"> $(document).on("change","#upload_input_pictures",function(){ var form=document.getElementById("jizhiform"); var data =new FormData(form); data.append("filename",$(this).attr("file-name")); $.ajax({ url: "http://www.demo.mm/common/multiuploads.html",//处理图片的文件路径 type: "POST",//传输方式 data: data, dataType:"json", //返回格式为json processData: false, // 告诉jQuery不要去处理发送的数据 contentType: false, // 告诉jQuery不要去设置Content-Type请求头 success: function(response){ console.log(response); if(response.code==0){ var result = ""; for(var i=0;i<response["urls"].length;i++){ result +='<span><img src="' + response["urls"][i] + '" height="100" /><input name="pictures_urls[]" type="text" value="' + response["urls"][i] + '" ><span onclick="deleteImage_auto(this)">删除</span></span>'; } $(".view_img_pictures").append(result); }else{ alert(response.error); } } }); }); </script>
如果重复操作两次,上传的时候则会执行这个js两次!
解决方法:
给对应的操作加上随机数,使每次操作的dom都不一样,执行的都是唯一的js函数,如加上数字:
<script type="text/javascript"> $(document).on("change","#upload_input_pictures_1919",function(){ var form=document.getElementById("jizhiform"); var data =new FormData(form); data.append("filename",$(this).attr("file-name")); $.ajax({ url: "http://www.demo.mm/common/multiuploads.html",//处理图片的文件路径 type: "POST",//传输方式 data: data, dataType:"json", //返回格式为json processData: false, // 告诉jQuery不要去处理发送的数据 contentType: false, // 告诉jQuery不要去设置Content-Type请求头 success: function(response){ console.log(response); if(response.code==0){ var result = ""; for(var i=0;i<response["urls"].length;i++){ result +='<span><img src="' + response["urls"][i] + '" height="100" /><input name="pictures_urls[]" type="text" value="' + response["urls"][i] + '" ><span onclick="deleteImage_auto(this)">删除</span></span>'; } $(".view_img_pictures").append(result); }else{ alert(response.error); } } }); }); </script>