JQuery change method on input type = “ file”

我试图用它简单而优雅的 API 100% 地接受 jQuery,但是我遇到了 API 和直接的 HTML 之间的不一致,我不能完全弄清楚。

我有一个 AJAX 文件上传脚本(功能正确) ,我想运行每次文件输入值变化。这是我的工作代码:

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

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

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

结果就不一样了。使用 onchange属性,每当按预期更改值时,都会调用 uploadFile()函数。但是对于 jQueryAPI .change()事件处理程序,事件只在值第一次发生变化时触发。之后的任何值更改都将被忽略。这在我看来是错误的,但肯定不会是 jQuery 的疏忽,对吗?

是否有其他人遇到过同样的问题,除了我上面描述的以外,你们有解决这个问题的方法或解决方案吗?

268781 次浏览

Ajax 上传程序是否正在刷新您的输入元素? 如果是这样,您应该考虑使用. live ()方法。

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

更新:

从 jQuery 1.7 + 开始,您现在应该使用. on ()

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

我无法通过向文件输入类型添加 jQuery 事件处理程序使 IE8 + 工作。我不得不采用老办法,将 onchange=""属性添加到 input 标记中:

<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);
}

在 jQuery 1.7中,。不推荐使用 live ()方法。使用。对()附加事件处理程序。旧版本 jQuery 的用户应该使用。优先于... 的委托()。现场直播。参考: http://api.jquery.com/on/

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