这是我使用的一个使用 jQuery 的示例,我已经针对 Firefox 11、Chrome 18 以及 IE9 进行了测试。所以它与我书中的浏览器非常兼容,尽管我只使用这三个。
HTML
这是一个基本的“可定制”HTML 结构。
<span>
File to Upload<br />
<label class="smallInput" style="float:left;">
<input type="file" name="file" class="smallInput" />
</label>
<input type="button" class="upload" value="Upload" style="float:left;margin-top:6px;margin-left:10px;" />
</span>
CSS
这是我的 CSS 示例
label.smallInput {
background:url(images/bg_s_input.gif) no-repeat;
width:168px;
}
JavaScript
这是举重者。
/* File upload magic form?? */
$("input.smallInput[type=file]").each(function(i){
var id = "__d_file_upload_"+i;
var d_wrap = $('<div/>').attr('id',id).css({'position':'relative','cursor':'text'});
$(this).wrap(d_wrap).bind('change blur focus keyup click',function(){
$("#"+id+" input[type=text]").val($(this).val());
}).css({'opacity':0,'zIndex':9999,'position':'absolute'}).removeClass('smallInput');
obj = $(this);
$("#"+id).append($("<input/>").addClass('smallInput').attr('type','text').css({'zIndex':9998,'position':'absolute'}).bind('click',function(e){obj.trigger('click');$(this).blur();}));
obj.closest('span').children('input.upload[type=button]').bind('click',function(e){
obj.trigger('click');
$(this).blur();
});
});
/* ************************ */
说明
HTML 非常简单,只是一个简单的元素,我包含了按钮,因此它可以独立于其他部分命名,当然这可以包含在 JavaScript 中,但简单地说,我有点懒边。该代码使用具有 文件类型 的 smallInput 类搜索所有 输入,这允许您在万一浏览器觉得很痛苦。
此方法仅使用 JavaScript 来确保传递,它不会改变任何与文件输入有关的浏览器行为。
您可以修改 HTML 和 JavaScript 以使其非常健壮,此代码足以满足我当前的项目,所以我怀疑我会对其进行任何更改。
注意事项
- 不同的浏览器对文件输入值的处理方式不同,这在 chrome 中会导致在 windows 机器上为 c:\fakeroot\。
- 使用匿名函数(因为没有更好的词),这意味着如果您输入的文件过多,您可能会导致浏览器在处理时运行缓慢。