基于jquery跨瀏覽器顯示的file上傳控件
其實(shí)要實(shí)現(xiàn)給file控件定義樣式,大致思想都是一樣的。
今天看到博客園的繁花連寫兩篇文章來研究file控件
《jquery.fileEveryWhere.js--一個(gè)跨瀏覽器的file顯示插件》
《firefox下input type="file"的size是多大》
我這里也按捺不住了。成果是繁花的,以下內(nèi)容引用自上面兩篇文章:
大牛ppk都說過,在從多表單控件中,上傳文件控件的樣式是最難以控制的。見文章Styling an input type="file"。本插件也多是參考此文。
先來看看input type="file"在chrome,ie,firefox這三個(gè)瀏覽器下表情各異吧。
ff和ie,是text+button的組合,就外形來看,firefox更標(biāo)準(zhǔn),事實(shí)上firefox存在兩個(gè)潛在問題:
1,firefox對(duì)type="file" 的input的width定義目前是不支持的(但是FF支持size屬性,可以給size設(shè)置一個(gè)值,來控制上傳框的大小,至于這個(gè)size到底是多大,見文章繁花-firefox下input type="file"的size是多大)。
2,火狐瀏覽器的提交file表單時(shí)只提交文件名不提交路徑,而IE提交的是路徑+文件名,chrome也能提交路徑+文件名,但只顯示文件名?;鸷鼮g覽器的提交file表單時(shí)只提交文件名不提交路徑(很遺憾,暫時(shí)沒有解決方法)
要讓file在各個(gè)瀏覽器顯示統(tǒng)一,純樣式已經(jīng)控制不了,只能用js腳本了?;静襟E有3:
1,通過文本框和按鈕去模擬一個(gè)input type=”file”。
2,把input="file"做成透明,用定位完全蓋住文本框和按鈕。
3,當(dāng)input type=”file”的onchange的時(shí),用js將文本框的值設(shè)置成input type=”file”的值。
了解步驟后,整個(gè)插件就很好寫了,代碼如下:
/*
* file everywhere - 瀏覽器通用文件上傳
* copyright->flowerszhong
* flowerszhong@gmail.com
* http://www.cnblogs.com/flowerszhong/
*/
(function($) {
$.fn.fileEveryWhere = function(options) {
var defaults = {
WrapWidth: 300,
WrapHeight: 30,
ButtonWidth: 60,
ButtonHeight: 28,
ButtonText: "瀏覽",
TextHeight: 28,
TextWidth: 240
};
var options = $.extend(defaults, options);
var browser_ver = $.browser.version.substr(0, 1);
var displayMode = ($.browser.msie && browser_ver <= "7") ? "inline" : "inline-block";
return this.each(function() {
//創(chuàng)建包含,設(shè)置為相對(duì)定位
var wrapper = $("<div class='fileWraper'>")
.css({
"width": options.WrapWidth + "px",
"height": options.WrapHeight + "px",
"display": displayMode,
"zoom": "1",
"position": "relative",
"overflow": "hidden",
"z-index":"1"
});
//創(chuàng)建文本輸入框,用于存放上傳文件名稱
var text = $('<input class="filename" type="text" />')
.css({
"width": options.TextWidth + "px",
"heigth": options.TextHeight + "px"
});
//創(chuàng)建瀏覽按鈕
var button = $('<input class="btnfile" type="button" />')
.val(options.ButtonText);
$(this).wrap(wrapper).parent().append(text, button);
$(this).css({
"position": "absolute",
"top": "0",
"left": "0",
"z-index": "2",
"height": options.WrapHeight + "px",
"width": options.WrapWidth + "px",
"cursor": "pointer",
"opacity": "0.0",
"outline":"0",
"filter": "alpha(opacity:0)"
});
if ($.browser.mozilla) { $(this).attr("size", 1 + (options.WrapWidth - 85) / 6.5) }
$(this).bind("change", function() {
text.val($(this).val());
});
});
};
})(jQuery);
使用很簡單:
$("input:file").fileEveryWhere({參數(shù)});
firefox對(duì)type="file" 的input的width定義目前是不支持的,但是FF支持size屬性,可以給size設(shè)置一個(gè)值,來控制上傳框的大小。
但是這個(gè)size值怎么設(shè)置,size="10"是多寬,默認(rèn)值又是多少,不能光憑感覺去設(shè)置。 用腳本來查看下:
<script type="text/javascript">
$(function() {
var fileArray = [];
var i = 0;
while (i < 100) {
fileArray.push(i + ":<input type='file' size='" + i + "' /><br />");
i++;
}
document.write(fileArray.join(""));
$("input:file").each(function() { $(this).after("<b>" + $(this).width() + "</b>") });
});
</script>
在火狐下得到這樣的結(jié)果:

發(fā)現(xiàn)了一定的規(guī)律,默認(rèn)為208像素,size="1"時(shí)為85像素,每個(gè)size之間相差6.5個(gè)像素的寬度,所以我們可以動(dòng)態(tài)的設(shè)定size的值,如:
- datePicker——日期選擇控件(with jquery)
- Javascript jquery css 寫的簡單進(jìn)度條控件
- 基于jQuery的日期選擇控件
- 基于jquery的讓頁面控件不可用的實(shí)現(xiàn)代碼
- asp.net+jquery滾動(dòng)滾動(dòng)條加載數(shù)據(jù)的下拉控件
- jQuery選中select控件 無法設(shè)置selected的解決方法
- 基于jQuery的實(shí)現(xiàn)簡單的分頁控件
- 使用jquery與圖片美化checkbox和radio控件的代碼(打包下載)
- 基于jQuery的獲得各種控件Value的方法
- JQuery里面的幾種選擇器 查找滿足條件的元素$("#控件ID")
- jWiard 基于JQuery的強(qiáng)大的向?qū)Э丶榻B
- jquery獲取tr中控件值并操作tr實(shí)現(xiàn)思路
- jquery設(shè)置控件位置的方法
- .net mvc頁面UI之Jquery博客日歷控件實(shí)現(xiàn)代碼
- jquery 日期控件datepicker屬性詳細(xì)解析
- Jquery獲得控件值的三種方法總結(jié)
- jquery日歷控件實(shí)現(xiàn)方法分享
- JQuery EasyUI 日期控件如何控制日期選擇區(qū)間
- jquery+javascript編寫國籍控件
相關(guān)文章
jQuery ready方法實(shí)現(xiàn)原理詳解
這篇文章主要介紹了jQuery ready方法實(shí)現(xiàn)原理詳解的相關(guān)資料,需要的朋友可以參考下2016-10-10JQuery EasyUI 結(jié)合ztrIee的后臺(tái)頁面開發(fā)實(shí)例
下面小編就為大家?guī)硪黄狫Query EasyUI 結(jié)合ztrIee的后臺(tái)頁面開發(fā)實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09jquery實(shí)現(xiàn)動(dòng)態(tài)操作select選中
文章主要向大家介紹了jQuery 根據(jù)值或者文本選中select的方法和示例,非常實(shí)用的功能,需要的朋友可以參考下2015-02-02讓新消息在網(wǎng)頁標(biāo)題閃爍提示的jQuery代碼
可能有一些站長會(huì)注意到這樣的效果,到收到的新消息會(huì)閃爍標(biāo)題提示,那么新消息在網(wǎng)頁標(biāo)題閃爍顯示的效果如何實(shí)現(xiàn),下面有個(gè)不錯(cuò)的示例,感興趣的朋友可以參考下2013-11-11jQuery.Validate 使用筆記(jQuery Validation范例 )
學(xué)習(xí)jQuery Validation,于是手寫一公共范例,并收藏以便后用,里面附有測試代碼,需要的朋友一起來測試。2010-06-06詳解jQuery中的getAll()和cleanData()
這篇文章主要介紹了jQuery之getAll()和cleanData()函數(shù)的實(shí)例代碼解析,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-04-04輕量級(jí)網(wǎng)頁遮罩層jQuery插件用法實(shí)例
這篇文章主要介紹了輕量級(jí)網(wǎng)頁遮罩層jQuery插件用法,實(shí)例分析了jquery遮罩層插件的定義、功能及使用方法,非常簡單實(shí)用,需要的朋友可以參考下2015-07-07javascript(基于jQuery)實(shí)現(xiàn)鼠標(biāo)獲取選中的文字示例【測試可用】
這篇文章主要介紹了javascript(基于jQuery)實(shí)現(xiàn)鼠標(biāo)獲取選中的文字,涉及jQuery響應(yīng)鼠標(biāo)事件及頁面元素屬性動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-10-10jQuery實(shí)現(xiàn)將div中滾動(dòng)條滾動(dòng)到指定位置的方法
這篇文章主要介紹了jQuery實(shí)現(xiàn)將div中滾動(dòng)條滾動(dòng)到指定位置的方法,涉及jQuery結(jié)合animate方法動(dòng)態(tài)操作頁面元素屬性的相關(guān)技巧,需要的朋友可以參考下2016-08-08jquery隱藏標(biāo)簽和顯示標(biāo)簽的實(shí)例
在jquery中我們要實(shí)現(xiàn)點(diǎn)擊按鈕隱藏標(biāo)簽和顯示標(biāo)簽,只要綁定指定button或其它,這樣點(diǎn)擊時(shí)調(diào)用hide或show函數(shù)即可解決,下面看個(gè)實(shí)例就明白了2013-11-11