目錄
一、製作靜態效果
首頁 web前端 js教程 基於jquery實作的可編輯下拉框實作程式碼_jquery

基於jquery實作的可編輯下拉框實作程式碼_jquery

May 16, 2016 pm 04:40 PM
下拉框 可編輯

原理就是一個textbox加一個ul模擬下拉框,用font模擬一個下拉式按鈕。

一、製作靜態效果

先用css和html,做出一個該有的樣子。這裡這兩個我用的是字體,可以在icomoon網站上面自己做。用字體的好處是和輸入框定位很方便,而且還可以控制大小顏色等,唯一的不足是IE6和IE7由於不支持:before選擇器,導致無法顯示這種字體,但可以通過一些其他方法實現,大家可以自己嘗試。下面是html代碼

<span style="display:inline-block;position:relative" class="combox_border">
 <input type="text" class="combox_input"/><font class="ficomoon icon-angle-bottom combox_button" style="display:inline-block"></font>
 <ul style="position:absolute;top:29px;left:-1px" class="combox_select">
 <li><a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >选项一</a></li>
 <li><a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >选项二</a></li>
 <li><a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >选项三</a></li>
 <li><a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >选项四</a></li>
 </ul>
</span>
登入後複製

1、標籤中有style和class,這個style就是必須屬性,一定要有
2.最外圍是用span來做包裹的,然後給了個inline-block屬性,之所以用行內元素是為了以後佈局的方便,換成塊元素也是可以的,但很多時候塊元素會伴隨著float浮動等樣式,控制起來比較麻煩
3、ficomoon icon-angle-bottom在定義字體
4.span的屬性position是relative,下拉我就打算用ul定位來模擬,ul的position是absolute,top以後可以根據jquery來獲取span的高度設置,left就寫死了
5.li裡面的內容我加了個a標籤,這裡就是想偷懶一下,a標籤有個:hover偽類,移上去可以改變CSS,這樣我就能少寫這個移到內容上去變樣式的特效

下面是CSS程式碼:

@font-face {
 font-family: 'icomoon';
 src:url('fonts/icomoon.eot&#63;-fl11l');
 src:url('fonts/icomoon.eot&#63;#iefix-fl11l') format('embedded-opentype'),
 url('fonts/icomoon.woff&#63;-fl11l') format('woff'),
 url('fonts/icomoon.ttf&#63;-fl11l') format('truetype'),
 url('fonts/icomoon.svg&#63;-fl11l#icomoon') format('svg');
 font-weight: normal;
 font-style: normal;
}
.ficomoon{font-family:'icomoon';}
.icon-angle-top:before {content: "\f102"}.icon-angle-bottom:before {content: "\f103"}
/*下面的可根据自己的实际情况做修改*/
.combox_border{border:1px solid #c2c2c2;height:28px;width:245px}
.combox_input{border:0;line-height:25px;height:25px;padding-left: 5px;width:85%;vertical-align: middle;}
.combox_button{width:12%;text-align:center;vertical-align: middle;cursor:pointer;border-left:1px solid #c2c2c2}
.combox_select{border:1px solid #c2c2c2;border-top:0;width:100%}
.combox_select li{overflow:hidden;height:30px;line-height:30px;cursor:pointer;}
.combox_select a {display: block;line-height: 28px;padding: 0 8px;text-decoration: none;color: #666;}
.combox_select a:hover {text-decoration: none;background:#f5f5f5}
登入後複製

這裡的combox_border等樣式可以自訂,可以加CSS3樣式美化,我這裡就做了個樸素的樣式。

二、製作JS特效

在做JS的時候,碰到個奇怪的問題,就是放在任何瀏覽器中都不會報錯,但是在IE6死活提示未設定的物件屬性的錯誤,最後發現是因為js檔案編碼的問題,不是UTF-8,改變下編碼就可以了。

先是一個jquery外掛程式格式

(function($){
 $.fn.combox = function(options) {
 
 };
})(jQuery);
登入後複製

然後是新增預設參數

var defaults = { 
 borderCss: "combox_border", 
 inputCss: "combox_input", 
 buttonCss: "combox_button", 
 selectCss: "combox_select",
 datas:[]
};
var options = $.extend(defaults, options);
登入後複製

borderCss 最外面包裹的样式,就是上面的span
inputCss 输入框的样式
buttonCss 按钮的样式,就是
selectCss 下拉列表的样式
datas 下拉列表中的内容

然後是一個渲染的方法

this.each(function() {
var _this = $(this);
_this = _initBorder(_this);//初始化外框CSS IE6中需要有返回值
_this = _initInput(_this);//初始化输入框
_initSelect(_this);//初始化下拉列表
});
登入後複製

動態的產生輸入框,按鈕,下拉框,附上樣式和時間。我將三個渲染分別放在了三個函數中,這樣清晰一點

       function _initBorder($border) {//初始化外框CSS
 $border.css({'display':'inline-block', 'position':'relative'}).addClass(options.borderCss);
 return $border;
 }
 
 function _initInput($border){//初始化输入框
 $border.append('<input type="text" class="'+options.inputCss+'"/>');
 $border.append('<font class="ficomoon icon-angle-bottom '+options.buttonCss+'" style="display:inline-block"></font>');
 //绑定下拉特效
 $border.delegate('font', 'click', function() {
 var $ul = $border.children('ul');
 if($ul.css('display') == 'none') {
 $ul.slideDown('fast');
 $(this).removeClass('icon-angle-bottom').addClass('icon-angle-top');
 }else {
 $ul.slideUp('fast');
 $(this).removeClass('icon-angle-top').addClass('icon-angle-bottom');
 } 
 });
 return $border;//IE6需要返回值
 }
 
 function _initSelect($border) {//初始化下拉列表
 $border.append('<ul style="position:absolute;left:-1px;display:none" class="'+options.selectCss+'">');
 var $ul = $border.children('ul');
 $ul.css('top',$border.height()+1);
 var length = options.datas.length;
 for(var i=0; i<length ;i++)
 $ul.append('<li><a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >'+options.datas[i]+'</a></li>');
 $ul.delegate('li', 'click', function() {
 $border.children(':text').val($(this).text());
 $ul.hide();
 $border.children('font').removeClass('icon-angle-top').addClass('icon-angle-bottom');//确定的时候要将下拉的icon改变
 });
 return $border;
 }
登入後複製

三個函數中的參數我都加了個$符號,便於自己知道這是一個jquery物件。這幾個函數中沒什麼技術困難,都是非常普通自然的邏輯,大家也可以隨時依照自己的不同需求改變程式碼,插件總共只有50幾行,非常容易修改。

下面是呼叫外掛:

<script type="text/javascript">
$(document).ready(function() {
 $('#combox').combox({datas:['选项一','选项二','选项三']});
})
</script>
</head>
<body>
  <span id="combox"></span>
</body>
</html>
登入後複製

一句話就可以了,挺方便的。

demo示範:http://demo.jb51.net/js/2014/combox_jquery/

demo下載:http://www.jb51.net/jiaoben/199034.html

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用 Vue 實作可編輯的資料表格? 如何使用 Vue 實作可編輯的資料表格? Jun 25, 2023 pm 06:20 PM

隨著前端技術的不斷發展,資料表格成為企業管理及資料展示的重要工具之一。在日常開發中,有時需要在資料表中進行資料修改或新增操作,這時候就需要實作可編輯的資料表格。本文將介紹如何使用Vue實作可編輯的資料表。一、實作想法在實現可編輯的資料表格功能時,我們需要考慮以下幾點:資料呈現:將資料渲染到表格中,以便展示和編輯。表格編輯:在表格中對資料進行編輯操作。

如何在Vue中實作多選下拉框 如何在Vue中實作多選下拉框 Nov 07, 2023 pm 02:09 PM

如何在Vue中實作多選下拉框在Vue開發中,下拉框是常見的表單元件之一。通常情況下,我們都會使用單選下拉方塊來選擇一個選項。但是,有時候我們需要實作多選下拉框,以便使用者可以同時選擇多個選項。在本文中,我們將介紹如何在Vue中實作多選下拉框,並提供具體的程式碼範例。一、使用ElementUI元件庫ElementUI是一套基於Vue的桌面端元件庫,提供了豐富的UI

如何使用Layui開發一個支援可編輯的個人日程管理系統 如何使用Layui開發一個支援可編輯的個人日程管理系統 Oct 25, 2023 am 11:42 AM

如何使用Layui開發一個支援可編輯的個人日程管理系統近年來,隨著資訊化技術的快速發展和人們生活節奏的加快,個人日程管理變得越來越重要。為了讓人們更能管理自己的時間和任務,我們可以使用Layui,這是一個基於JavaScript的前端UI框架,它提供了豐富的元件和簡潔的風格,非常適合用來開發個人行程管理系統。一、環境準備首先,我們需要準備開發環境。確保你

如何使用 JavaScript 實作下拉框連動效果? 如何使用 JavaScript 實作下拉框連動效果? Oct 20, 2023 pm 03:57 PM

如何使用JavaScript實作下拉方塊連動效果?在開發網頁中,下拉框連動是一種常見的互動效果。它透過選擇一個下拉框中的選項,動態改變另一個下拉框的選項內容,從而實現二者之間的連動。本文將介紹如何使用JavaScript實作下拉方塊連動效果,並附上具體的程式碼範例。 HTML結構首先,我們需要建立兩個下拉框,並且為它們新增id屬性,以便JavaScr

Vue行動端下拉框滾動問題解決方案 Vue行動端下拉框滾動問題解決方案 Jun 29, 2023 pm 11:49 PM

Vue開發中如何解決行動端下拉框滾動問題隨著行動端的普及,越來越多的網頁應用程式開始針對行動裝置進行開發。而在行動端開發過程中,我們常會遇到一個問題,就是下拉框在行動裝置上的滾動問題。在傳統的PC端,下拉框的滾動是由瀏覽器預設的滾動條控制的,而在行動裝置上,並沒有滾動條,因此會導致下拉框無法進行滾動。這在某些場景下會造成使用者無法選擇到下拉框中的所有選項的問題。

Vue文件中的可編輯表格實作方法 Vue文件中的可編輯表格實作方法 Jun 20, 2023 pm 06:43 PM

Vue.js是目前非常流行的前端框架之一,它使用資料驅動的方式來建立使用者介面,具有資料雙向綁定、元件化等特性。在Vue.js的文檔中,提供了一個實作可編輯表格的方法,本文將介紹此方法的具體實作步驟。準備數據首先要準備一組數據,這裡以學生資訊為例。資料格式可以是一個數組,每個元素包含姓名、性別、年齡等屬性。 students:[{name:'小明

如何使用Layui開發一個支援可編輯的電子書閱讀器 如何使用Layui開發一個支援可編輯的電子書閱讀器 Oct 24, 2023 am 08:08 AM

如何使用Layui開發一個支援可編輯的電子書閱讀器概述:Layui是一款簡單易用且功能強大的前端框架,它提供了豐富的UI組件和開發工具,使得開發者能夠快速構建美觀且功能完善的網頁應用。本文將介紹如何使用Layui框架開發一個支援可編輯的電子書閱讀器,使用戶能夠在電子書中進行劃重點、標記、筆記等操作。步驟一:專案準備首先,我們需要準備一個基本的專案架構。創建一

如何利用Layui實作可編輯的表格功能 如何利用Layui實作可編輯的表格功能 Oct 25, 2023 am 11:27 AM

如何利用Layui實現可編輯的表格功能Layui是一套經典而簡潔的前端UI框架,具有豐富的元件和強大的功能。在使用Layui開發過程中,我們可能會遇到需要實作可編輯的表格功能的需求。本文將介紹如何利用Layui的table元件和form表單元件,實現可編輯的表格功能,並提供具體的程式碼範例。一、引入Layui函式庫首先,在專案中引入Layui函式庫的相關文件。可以選擇

See all articles