在这里,我们将给大家分享关于javascript-检测何时将文件拖到文件输入中的知识,让您更了解js检查文件是否存在的本质,同时也会涉及到如何更有效地Html多文件输入–javascript访问和删除
在这里,我们将给大家分享关于javascript-检测何时将文件拖到文件输入中的知识,让您更了解js检查文件是否存在的本质,同时也会涉及到如何更有效地Html多文件输入 – javascript访问和删除文件、javascript – HTML动态添加文件输入不起作用、javascript – Html文件输入,从File对象设置选择、javascript – jQuery文件上传在动态创建文件输入时不起作用的内容。
本文目录一览:- javascript-检测何时将文件拖到文件输入中(js检查文件是否存在)
- Html多文件输入 – javascript访问和删除文件
- javascript – HTML动态添加文件输入不起作用
- javascript – Html文件输入,从File对象设置选择
- javascript – jQuery文件上传在动态创建文件输入时不起作用
javascript-检测何时将文件拖到文件输入中(js检查文件是否存在)
我有这段代码可以检测用户何时单击文件输入以上传文件.
$('input:file').click(function() {
// do stuff here
});
我发现许多用户都将文件拖到文件输入上以上传文件,并且这种情况不会触发.我考虑过将鼠标悬停,或者与mouseup结合使用,但是我不确定如何知道用户在执行此操作时是否持有文件.
为了澄清,我不需要实现拖放的帮助.另外,如果可能的话,我想继续使用文件输入,而不要使用涉及拖放到其他元素(例如div)上的解决方案.我希望放置在实际文件输入中.
如何检测文件被拖到文件输入上以便对它做出反应?
解决方法:
您可以对浏览器的本地拖动事件(例如dragenter和dragleave)做出反应
container.addEventListener("dragenter", this.dragenter, true);
container.addEventListener("dragleave", this.dragleave, true);
因此,您只需要定义要在拖动发生时监视的区域以及对此事件的操作即可.
Html多文件输入 – javascript访问和删除文件
<input type="file" name="images" id="i1"multiple />
我似乎无法访问.files数组来删除其中一个值.我曾尝试使用隐藏的输入类型与文件值,但我不认为这可以做….所以我试图访问输入元素删除!
所有代码都有一个小提琴.有很多东西可以复制情况,但控制删除事件的代码大约是js的一半.
http://jsfiddle.net/dheffernan/ryrfS/1
有没有人有一个访问方法,例如多个文件上传和删除的第三个输入值?
下面的js代码 – 使用.splice尝试.
var files=jQuery('#i'+inputid)[0].files; for (var i = 0; i < files.length; i++) { console.log(files[i].name); } var inputname= 3; jQuery('#i'+inputid).splice(inputname,1); // no files are being deleted!!! console.log('2nd test'); var files=jQuery('#i'+inputid)[0].files; for (var i = 0; i < files.length; i++) { console.log(files[i].name); } }
解决方法
基本上将图像添加到FormData,使用ajax提交它并返回我上传它们的网址(我包括用于wordpress的PHP).我从js代码和PHP代码中删除了所有数据验证以保持简短,我仍然需要针对ie9 /较旧浏览器的解决方法.
jQuery代码:
jQuery(document).on('change','.imageup',function(){ var id= jQuery(this).attr('id'); var length= this.files.length; if(length>1) {// if a multiple file upload var images = new FormData(); images.append('action','uploadimg'); //wordpress specific add functionname jQuery.each(event.target.files,function(key,value ){ images.append(key,value); }); jQuery.ajax({ url: '/wp-admin/admin-ajax.PHP',type: 'POST',data: images,cache: false,processData: false,contentType: false,success: function(data) { var obj= JSON.parse(data); jQuery.each(obj,value){ if(key!='errors') { var ind = value.lastIndexOf("/") + 1; var filename = value.substr(ind); //do something here with filename console.log(filename); } }); }//end of success function }); //end ajax } });
PHP代码wordpress,如果不使用wordpress更改上面的url等.
function uploadimg() { $error = false; $files = array(); if ( ! function_exists( 'wp_handle_upload' ) ) require_once( ABSPATH . 'wp-admin/includes/file.PHP' ); $upload_overrides = array( 'test_form' => false ); $url=array(); foreach($_FILES as $file){ $uploadimage= $file; $movefile = wp_handle_upload( $uploadimage,$upload_overrides ); if ( $movefile ) { if($movefile['url']) { $url[]=$movefile['url']; } else { $url['errors'][]="error ".$movefile['file']." is not valid"; } } else { } } $url['errors'][]="error is not valid"; echo json_encode($url); exit; } add_action('wp_ajax_uploadimg','uploadimg'); add_action('wp_ajax_nopriv_uploadimg','uploadimg');
javascript – HTML动态添加文件输入不起作用
例如,我有一个名为学生的部分
我允许用户动态添加学生
每个学生都有字段名称,点数和&图片
名字和名称积分有效.添加Image字段时出现问题
看到上面的附件,当我尝试从第二个学生中选择文件时,图像值将转到第一个学生.
< label for =“student-image-1”>指向第一名学生
< label for =“student-image-2”>指向第二个学生
并且文件输入的ID是正确的.
注意:我使用jQuery.clone来复制div
知道为什么我选择第二个输入将填充到第一个?
源代码
$('#student-add-more').click(function(e) {
e.preventDefault();
var count = $('div[id^=student-row-]').length;
var last = $('div[id^=student-row-]').last();
var $clone = last.clone(true);
var next_id = count + 1;
$clone.attr('id', 'student-row-' + next_id);
$clone.find('.image-label')
.attr('for', 'student-image-' + next_id)
;
var fileinput = $clone.find('.filestyle')
.attr('id', 'student-image-' + next_id)
.attr('name', 'students_image['+count+']')
;
fileinput.wrap('<form>').closest('form').get(0).reset();
fileinput.unwrap();
$clone.find('.bootstrap-filestyle > label.btn')
.attr('for', 'student-image-' + next_id)
;
$clone.find('.bootstrap-filestyle > input').val('');
var delete_button = $clone.find('.btn-danger')
.attr('data-url', 'student-row-' + next_id)
.attr('href','#deleteModal')
.attr('class', 'btn btn-danger btn-sm btn-delete')
;
delete_button.closest('.form-group').removeAttr('style');
$clone.show().insertAfter(last);
});
来自萤火虫的HTML
<div id="student-row-1">
<div>
<div>
<span>1</span>
<div></div>
<labelfor="student-1">Name</label> <em>*</em>
</div>
<div>
<input type="text" value="" name="students[0][title]"id="title-1"> </div>
</div>
<div>
<div>
<labelfor="point-1">Points</label> <em>*</em>
</div>
<div>
<input type="text" value="" name="students[0][point]"id="point-1"> </div>
</div>
<div>
<div>
<labelfor="student-image-1">Image</label> <em>*</em>
</div>
<div>
<input type="file" name="students_image[0]" data-classinput="form-control inline input-s" data-classbutton="btn btn-default" data-icon="false"id="student-image-1"><divhttps://www.jb51.cc/tag/dis/" target="_blank">display: inline;"><input type="text" disabled=""> <labelfor="student-image-1"><span>Choose file</span></label></div> </div>
</div>
<div>
<div></div>
<div>
<a title="Delete" data-toggle="modal" href="#"data-url="student-row-1">Delete</a>
</div>
</div>
</div>
<div id="student-row-2"https://www.jb51.cc/tag/dis/" target="_blank">display: block;">
<div>
<div>
<span>2</span>
<div></div>
<labelfor="student-1">Name</label> <em>*</em>
</div>
<div>
<input type="text" value="" name="students[1][title]"id="title-2"> </div>
</div>
<div>
<div>
<labelfor="point-1">Points</label> <em>*</em>
</div>
<div>
<input type="text" value="" name="students[1][point]"id="point-2"> </div>
</div>
<div>
<div>
<labelfor="student-image-2">Image</label> <em>*</em>
</div>
<div>
<input type="file" name="students_image[1]" data-classinput="form-control inline input-s" data-classbutton="btn btn-default" data-icon="false"id="student-image-2"><divhttps://www.jb51.cc/tag/dis/" target="_blank">display: inline;"><input type="text" disabled=""> <labelfor="student-image-2"><span>Choose file</span></label></div> </div>
</div>
<div>
<div></div>
<div>
<a title="Delete" data-toggle="modal" href="#deleteModal"data-url="student-row-2">Delete</a>
</div>
</div>
</div>
解决方法:
终于解决了问题,我才意识到文件输入是使用Bootstrap Filestyle.
// file
var file_container = $clone.find('.filestyle').parent();
file_container.empty();
var fileinput = $('<input>').addClass('filestyle').attr({
id: 'student-image-'+next_id,
name: 'students_image['+count+']',
type: 'file',
});
file_container.append(fileinput);
fileinput.filestyle({
icon: 'false',
classButton: 'btn btn-default',
classInput: 'form-control inline input-s',
});
var file_label_container = file_container.prev();
var new_label = $('<label>').addClass('image-label').attr('for', 'student-image-'+next_id).text(file_label_container.find('label').text());
file_label_container.find('label').remove();
file_label_container.prepend(new_label);
我删除了原始输入,并重新创建了一个普通输入,然后使用filestyle来设置文件输入的样式并附加到容器中.以及左侧的标签.
javascript – Html文件输入,从File对象设置选择
我在页面上有一个拖动区域,我可以从中获取File对象.我不想使用xhr.sendAsBinary,我宁愿只是从目标设置为框架的常规表单上传.
我尝试过这样的事情
var select = document.getElementById('upload_1'); select.files[0] = myFile; myForm.submit();
有没有办法做到这一点?
解决方法
您似乎想从drop事件中获取File对象并将其分配给< input>元件.不幸的是,你做不到.只有用户才能选择文件;您无法动态更改将上传的文件,因为出于安全原因,浏览器会拒绝JavaScript此功能.
既然你说你有一个拖动区域,我假设你正在使用并定位支持拖放的浏览器.请注意,并非所有浏览器都支持拖放,因此我的示例仅限于此类浏览器.
通过拖放,您可以从drop事件中获取File对象,而不需要输入元素.
// when you attach the 'drop' event listener var dropzone = document.getElementById('drag_area'); // <-- ID of your drag area attachEvent(dropzone,'drop',function(event) { var dt = event.dataTransfer; var fileList = dt.files; var file = fileList[0]; // you would have to change this if you allow multi-file upload uploadFile(file); }); function uploadFile(filetoUpload) { var xhr = new XMLHttpRequest(); xhr.open("POST","url",true); // <-- provide the proper URL var form_data = new FormData(); form_data.append('file',filetoUpload); xhr.send(form_data); } function attachEvent(element,type,fn) { if (element.addEventListener) { element.addEventListener(type,fn,false); } else if (element.attachEvent) { element.attachEvent('on' + type,fn); } }
请注意,这不是100%浏览器兼容.某些浏览器不支持通过XMLHttpRequest()上传文件.如果您想支持这些浏览器,那么您必须做一些不同的事情.
最后,我的示例不考虑使用表单.如果您想要基于表单的方法,请告诉我.我也可以帮助你:)
如果您有任何疑问,请告诉我.
javascript – jQuery文件上传在动态创建文件输入时不起作用
我正在使用这个jquery上传器(http://blueimp.github.io/jQuery-File-Upload/basic.html),当文件输入放在网站的原始代码中时它工作正常,但我动态地用jquery附加字段,它不起作用.这是触发上传的jquery:
$('.fileupload').fileupload({
dataType: 'json',
done: function (e, data) {
$.each(data.result.files, function (index, file) {
alert(file.name);
//$('<p/>').text(file.name).appendTo(document.body);
});
}
});
这就是应该触发上传的内容:
<inputtype="file" name="files[]" data-url="uploads/">
这是jquery附加的代码:
$(document).on('click','.addItem', function(){
$('<!--ROW START-->\
<formdata-url="uploads/">\
<div>\
<div><input type="text"name="itemName[]"></div>\
<div><textareaname="itemDescription[]" cols="20" rows="1"></textarea></div>\
<div><textareaname="itemCondition[]" cols="20" rows="1"></textarea></div>\
<input type="hidden"name="itemId[]" value="">\
<input type="hidden" name="itemInventoryId[]" value="<?=$_GET["inventory_id"]?>">\
<input type="hidden" name="itemParent[]" value="'+$(this).closest('.formHolder').data('parent-room')+'">\
<div>\
<div>\
<inputtype="file" name="files[]">\
</div>\
</div>\
<div><i> </i> <i> </i></div>\
</div>\
</form>\
<!--/ROW END-->').fadeIn(500).appendTo($(this).parents().siblings('.items'));
$(this).parent().parent().siblings('.widget-header, .header-margin, .hide').removeClass('hide').fadeIn();
});
就像我说的,当我把它添加到实际的代码中,而不是动态它的罚款.有人可以帮忙吗?
解决方法:
这是因为在添加元素之前绑定了fileupload事件.
尝试将代码移动到回调函数中,该函数将在创建输入元素后执行.从appendTo()doesn’t support callback开始,你可以使用每个(回调):
$('code_that_you_append').appendTo('some_element').each(function () {
// here goes $('.fileupload').fileupload({ ... }) function
});
如果需要在代码中的多个位置将事件绑定到.fileupload,则可以创建一个函数来避免代码重复,如下所示:
function bindFileUpload() {
$('.fileupload').fileupload({
dataType: 'json',
done: function (e, data) {
$.each(data.result.files, function (index, file) {
alert(file.name);
});
}
});
};
然后在回调中调用它,就像之前一样:
$('code_that_you_append').appendTo('some_element').each(function () {
bindFileUpload();
});
我创建了一个little demo.它绑定click而不是fileupload来简化事情(fileupload是外部插件…),但一般规则保持不变.
关于javascript-检测何时将文件拖到文件输入中和js检查文件是否存在的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Html多文件输入 – javascript访问和删除文件、javascript – HTML动态添加文件输入不起作用、javascript – Html文件输入,从File对象设置选择、javascript – jQuery文件上传在动态创建文件输入时不起作用的相关知识,请在本站寻找。
本文标签: