我正在尝试使用简单而优雅的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的疏忽,对吧?
是否有其他人遇到过相同的问题,除了上面描述的内容之外,您是否有解决问题的方法或解决方案?
答案 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);
}