版權(quán)聲明: 本文由 一只博客 發(fā)表于?bloghome博客
10年積累的成都網(wǎng)站制作、成都網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先做網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有高坪免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
文章鏈接:?https://www.bloghome.com.cn/user/cnn237111
先上代碼:
jQuery.beDropdownlist.js
?
(function?($)?{//jquery插件編寫中,不能假設(shè)$是有效的,因此,使用這種包裝函數(shù),使得在下面的代碼中可以繼續(xù)寫$,對于這個函數(shù)的分析,可以具體看下面的分析。?????$.fn.beDropdownlist?=?function?(data,?fn)?{//?$.fn對象是$.prototype的別名,使用fn為了簡潔。??????????//默認值?????????var?defaults?=?{?????????????data:?['nothing']?????????}??????????var?options?=?{?data:?data?};?????????options?=?$.extend(defaults,?options);?//使得參數(shù)覆蓋??????????var?bindevent?=?function?(o)?{?????????????var?tmpid?=?"tmpselector_"?+?$(o).attr("id");?//生成臨時的id?????????????if?($("#"?+?tmpid).length?>?0)?????????????????return;?//退出,不在繼續(xù)下去??????????????var?data?=?options.data;?//數(shù)據(jù)源??????????????//此處style中設(shè)置為absolute?????????????var?html?=?"";?????????????var?left?=?$(o).offset().left;?????????????var?top?=?$(o).offset().top?+?$(o).height()?+?4;??????????????var?finalize?=?function?()?{?????????????????$("#"?+?tmpid?+?"?li").die('click');?//取消事件綁定?????????????????$("#"?+?tmpid).remove();?????????????}?????????????$("body").append(html);?????????????//設(shè)置該div的寬度,位置等。?????????????$("#"?+?tmpid).width($(o).width()?+?5);?????????????$("#"?+?tmpid).offset({?top:?top,?left:?left?});?????????????$("#"?+?tmpid).live('mouseleave',?function?()?{?finalize();?});?????????????$("#"?+?tmpid?+?"?li").live('click',?function?()?{?????????????????$(o).val($(this).text());?????????????????finalize();?????????????????if?(fn?!=?undefined)?{?????????????????????fn();?//調(diào)用傳進來的函數(shù)。?????????????????}?????????????});?????????}??????????this.each(function?()?{//由于jquery的選擇符可能匹配多個對象,所以需要用each,對每個匹配的元素做操作。?????????????if?($(this).is(":text")?==?true)?{?????????????????$(this).click(function?()?{?????????????????????bindevent($(this));?//設(shè)置要做的內(nèi)容?????????????????})?????????????}?????????});?????};?})(jQuery);";?????????????//動態(tài)生成一個div,內(nèi)含li元素?????????????for?(var?item?in?data)?{?????????????????html?+=?"
- "?+?data[item]?+?"
";?????????????}?????????????html?+=?"
?
jQuery.beDropdownlist_demo.html
?
??????????????????????????????????
?????
?????國家:?????城市:??
?
編寫jquery有幾點注意:
$.fn對象是$.prototype的別名,使用fn為了簡潔。
options = $.extend(defaults, options); 使得參數(shù)覆蓋,該函數(shù)的具體說明可以參考jQuery手冊。
由于jquery的選擇符可能匹配多個對象,所以需要用each,對每個匹配的元素做操作。
jquery插件編寫中,不能假設(shè)$總是是有效的,因此,使用包裝函數(shù),使得在下面的代碼中可以繼續(xù)寫$。
包裝函數(shù)的形式如下:
?
(function?($)?{??????????????})(jQuery);
?
?
該方式使用的是一種匿名函數(shù)的方式,傳入的參數(shù)是jQuery,函數(shù)體內(nèi)部仍然用$符合作為jQuery對象,因此很方便,與之等價的寫法其實就是:
?
var?baozhuanghanshu=function?($)?{???//具體實現(xiàn)?}?baozhuanghanshu(jQuery)
?
?
也就是說,上面的jquery插件也可以采用這種寫法,直接調(diào)用baozhuanghanshu即可。甚至可以把$寫成$my$作為jQuery。如下:
?
var?baozhuanghanshu=function?(?$my$?)?{?//具體實現(xiàn)????????}?baozhuanghanshu(jQuery)
但是一般遵循約定,包裝方法都是寫成
(function ($) {
?})(jQuery);
這種形式,有利于不同程序員的閱讀。