on文件输入元素的更改事件
on change event for file input element
我有4个文件输入,我希望它们在值更改时触发上传过程。我的意思是,当你选择一张图片并点击打开选择图片对话框时,上传图片的脚本就会被触发。我使用了onchange事件,但我认为这不是正确的事件:
JS:
$("input[type=file]").on('change',function(){
alert(this.val());//I mean name of the file
});
HTML:
<div class="form-group col-md-11 col-md-offset-1">
<input type="file" name="photos[]">
<input type="file" name="photos[]">
<input type="file" name="photos[]">
<input type="file" name="photos[]">
</div>
我该怎么办?
OnChange
事件是一个不错的选择。但是,如果用户选择了相同的图像,则不会触发该事件,因为当前值与以前的值相同。
例如,图像是相同的,但宽度发生了变化,并且应该上传到服务器。
为了防止这个问题,你可以使用以下代码:
$(document).ready(function(){
$("input[type=file]").click(function(){
$(this).val("");
});
$("input[type=file]").change(function(){
alert($(this).val());
});
});
使用元素的files
文件列表,而不是val()
$("input[type=file]").on('change',function(){
alert(this.files[0].name);
});
对于想要在文件输入中直接使用onchange事件的人,请设置onchange="somefunction()
,链接中的示例代码:
<html>
<body>
<script language="JavaScript">
function inform(){
document.form1.msg.value = "Filename has been changed";
}
</script>
<form name="form1">
Please choose a file.
<input type="file" name="uploadbox" size="35" onChange='inform()'>
<br><br>
Message:
<input type="text" name="msg" size="40">
</form>
</body>
</html>
为文件输入提供唯一的类和不同的id
$("#tab-content").on('change',class,function()
{
var id=$(this).attr('id');
$("#"+id).trigger(your function);
//for name of file input $("#"+id).attr("name");
});
尽管选择带有输入元素的文件时触发了onchange
事件,但带有type="file"
的HTMLInputElement
的value
属性将是一个伪路径,如C:'fakepath'image.jpg
。
正如Jason p所说,
val()
是一个jquery函数,但上下文中的this
是一个DOM对象。尝试
this.value
或$(this).val()
另一方面,正如Humberto Corrêa所指出的,
如果用户选择了相同的图像,则不会触发该事件,因为当前值与以前的值相同。
事实是,即使文件内容不同,除非文件名或大小也发生了更改,否则事件也可能不会发生。如果您希望输入事件始终触发,请参阅以下代码片段。
// Always fire input event on file inputs
// even when file name or size hasn't changed
var emptyFileList = $('<input type="file">').get(0).files;
$input.filter('[type=file]').on('click', function() {
// 1. Backup current file list
$(this).prop('originalFile', this.files);
// 2. Clear current file list
$(this).prop('files', emptyFileList);
}).on('input', function() {
// 3. If the new file list is empty, try to restore previous file list
if (this.files === emptyFileList) {
this.files = $(this).prop('originalFile');
}
});
this.files
是一个FileList对象,包含通过输入选择的所有文件。
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 将事件聚焦/模糊在可编辑内容的元素上
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 在IE8中不起作用的元素上触发单击事件
- 正在ng重复元素上添加事件
- 单击p元素时的javascript触发事件
- 存在每个时间元素的javascript事件
- Firefox:点击并更改未附加到文档树中的复选框元素上的事件
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 将jQuery事件应用于所有类元素
- 在IE8上使用jQuery克隆HTML5元素和事件
- 单击其他元素时,我如何使用 jQuery 忽略更改事件
- 访问代码生成的输入元素上的keyup事件
- 如何查明鼠标按下事件是否发生在滚动条上或元素中的其他任何位置
- 当元素到达屏幕上的某个位置时触发事件
- Mootools:如何在点击时保持元素高亮显示并停止所有事件
- 将事件侦听器添加到文档,而不是签入元素存在,然后添加事件侦听器
- JQuery:使用clone()生成的元素不采用原始的事件属性
- 从其他元素上的单击事件访问image src属性
- 触发“三个”的点击事件.元素