输入类型=“文件”的jQuery更改方法

时间:2010-04-27 12:47:29

标签: jquery file-upload input event-handling onchange

我正在尝试使用简单而优雅的API来接受jQuery 100%,但我遇到了API和直接HTML之间的不一致,我无法理解。

我有一个AJAX文件上传器脚本(运行正常),我想在每次文件输入值更改时运行。这是我的工作代码:

<input type="file" size="45" name="imageFile" id="imageFile" onchange="uploadFile()">

当我将onchange事件转换为jQuery实现时:

$('#imageFile').change(function(){ uploadFile(); });

结果不一样。使用onchange属性,只要按预期更改值,就会调用uploadFile()函数。但是使用jQuery API .change()事件处理程序时,事件仅在第一次更改值时触发。忽略之后的任何值更改。这对我来说似乎不对,但肯定这不是jQuery的疏忽,对吧?

是否有其他人遇到过相同的问题,除了上面描述的内容之外,您是否有解决问题的方法或解决方案?

2 个答案:

答案 0 :(得分:87)

是刷新输入元素的ajax上传器吗? 如果是这样,你应该考虑使用.live()方法。

 $('#imageFile').live('change', function(){ uploadFile(); });

更新

从jQuery 1.7+开始你应该使用.on()

 $(parent_element_selector_here or document ).on('change','#imageFile' , function(){ uploadFile(); });

答案 1 :(得分:10)

我无法通过向文件输入类型添加jQuery事件处理程序来使IE8 +工作。我不得不去老派并将onchange=""属性添加到输入标记:

<input type='file' onchange='getFilename(this)'/>

function getFileName(elm) {
   var fn = $(elm).val();
   ....
}

修改

function getFileName(elm) {
   var fn = $(elm).val();
   var filename = fn.match(/[^\\/]*$/)[0]; // remove C:\fakename
   alert(filename);
}