jquery.fileEveryWhere.js 一個(gè)跨瀏覽器的file顯示插件
先來(lái)看看input type="file"在chrome,ie,firefox這三個(gè)瀏覽器下表情各異吧。

chrome像是button+label組合,看起差異最大。
ff和ie,是text+button的組合,就外形來(lái)看,firefox更標(biāo)準(zhǔn),事實(shí)上firefox存在兩個(gè)潛在問題:
1,firefox對(duì)type="file" 的input的width定義目前是不支持的(但是FF支持size屬性,可以給size設(shè)置一個(gè)值,來(lái)控制上傳框的大小,至于這個(gè)size到底是多大,見文章繁花-firefox下input type="file"的size是多大)。
2,火狐瀏覽器的提交file表單時(shí)只提交文件名不提交路徑,而IE提交的是路徑+文件名,chrome也能提交路徑+文件名,但只顯示文件名。火狐瀏覽器的提交file表單時(shí)只提交文件名不提交路徑(很遺憾,暫時(shí)沒有解決方法)
要讓file在各個(gè)瀏覽器顯示統(tǒng)一,純樣式已經(jīng)控制不了,只能用js腳本了?;静襟E有3:
1,通過(guò)文本框和按鈕去模擬一個(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
*/
(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);
使用很簡(jiǎn)單:
$("input:file").fileEveryWhere({參數(shù)});
這樣就可以統(tǒng)一顯示input="file",并且易于美化。
下載該插件:jquery.fileEveryWhere.rar
來(lái)自:http://www.cnblogs.com/flowerszhong/
相關(guān)文章
jquery下利用jsonp跨域訪問實(shí)現(xiàn)方法
客戶端的跨域訪問,可以通過(guò)jsonp方式來(lái)實(shí)現(xiàn),jquery提供了跨域訪問的方法,jQuery.ajax()支持get方式的跨域。當(dāng)然支持跨域還需要服務(wù)器端相應(yīng)的處理。2010-07-07
jquery表格datatables實(shí)例解析 直接加載和延遲加載
這篇文章主要針對(duì)jquery表格datatables實(shí)例進(jìn)行解析,可以直接加載和延遲加載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08
Jquery實(shí)現(xiàn)$.fn.extend和$.extend函數(shù)
這篇文章主要介紹了Jquery實(shí)現(xiàn)$.fn.extend和$.extend函數(shù)的相關(guān)資料,需要的朋友可以參考下2016-04-04
jQuery ajax全局函數(shù)處理session過(guò)期后的ajax跳轉(zhuǎn)問題
這篇文章主要介紹了基于jQuery的全局ajax函數(shù)處理session過(guò)期后的ajax操作的相關(guān)資料,需要的朋友可以參考下2016-06-06
jQuery插件Elastislide實(shí)現(xiàn)響應(yīng)式的焦點(diǎn)圖無(wú)縫滾動(dòng)切換特效
這篇文章主要介紹了jQuery插件Elastislide實(shí)現(xiàn)響應(yīng)式的焦點(diǎn)圖無(wú)縫滾動(dòng)切換特效,效果非常的棒,而且兼容性也很好,推薦給小伙伴們2015-04-04
使用JQuery實(shí)現(xiàn)智能表單驗(yàn)證功能
表單驗(yàn)證功能在項(xiàng)目中經(jīng)常會(huì)用得到,接下來(lái)給大家介紹使用jquery實(shí)現(xiàn)智能表單驗(yàn)證功能實(shí)例代碼,對(duì)jquery實(shí)現(xiàn)表單驗(yàn)證功能相關(guān)資料感興趣的朋友一起學(xué)習(xí)吧2016-03-03
jQuery進(jìn)階實(shí)踐之利用最優(yōu)雅的方式如何寫ajax請(qǐng)求
ajax請(qǐng)求相信對(duì)大家來(lái)說(shuō)都不陌生,下面這篇文章主要介紹了jQuery進(jìn)階實(shí)踐之利用最優(yōu)雅的方式如何寫ajax請(qǐng)求的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12

