asp.net 自制的單選、多選列表實(shí)現(xiàn)代碼
更新時(shí)間:2009年08月21日 11:35:31 作者:
在ASP.NET的頁面上,ListBox最終是渲染成select元素,而CheckListBox最終被渲染成div或者是table,使得二者的樣式無法統(tǒng)一,或者說要統(tǒng)一很麻煩。
問:為什么要“自制”?不是有現(xiàn)成的控件嗎?
答:在ASP.NET的頁面上,ListBox最終是渲染成select元素,而CheckListBox最終被渲染成div或者是table,使得二者的樣式無法統(tǒng)一,或者說要統(tǒng)一很麻煩。
解決:
于是,決定干脆自行組合一些元素,實(shí)現(xiàn)單選列表、多選列表的統(tǒng)一樣式。
首先,無論是單選列表還是多選列表,都用一個(gè)有邊框的div來做容器:
<div class="list"></div>
然后,在這個(gè)div中添加數(shù)據(jù)項(xiàng)。為了在響應(yīng)onclick事件時(shí),能夠遍歷數(shù)據(jù)項(xiàng),進(jìn)而做一些樣式上的控制,我需要把各個(gè)數(shù)據(jù)項(xiàng)的name屬性設(shè)為一樣的,然后用getElementsByName獲?。ㄟ@種辦法我在復(fù)選框的全選功能上常用)。然而,經(jīng)過實(shí)踐,發(fā)現(xiàn)div、span均無name屬性,最終找到用錨點(diǎn),也就是<a>標(biāo)記,可以實(shí)現(xiàn)。
例如:
<div id="divDepartments" class="list">
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門1</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門2</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門3</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門4</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門5</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門6</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門7</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門8</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門9</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門10</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門11</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門12</a>
</div>
其中,list樣式:
.list
{
overflow-y:scroll;
width:120px;
height:150px;
padding:3px;
border:solid 1px #AFAFAF;
background-color: #ffffff;
cursor: pointer;
}
ItemClicked函數(shù)用來響應(yīng)click事件。下面的代碼只是做一些樣式上的變化,還可繼續(xù)添加加載數(shù)據(jù)的內(nèi)容:
function ItemClicked(a){
a.style.backgroundColor="#EEEEEE";
as=document.getElementsByName(a.name);
for(i=0;i<as.length;i++){
if(as[i]!=a){as[i].style.backgroundColor="#FFFFFF";}
}
}
帶有復(fù)選框的多選列表也大同小異,只是這里由于遍歷數(shù)據(jù)項(xiàng)時(shí),只要對(duì)復(fù)選框遍歷即可,故可以使用div做數(shù)據(jù)項(xiàng)的容器了:
<div id="divPersons" class="list">
<div><input type="checkbox" />人員1</div>
<div><input type="checkbox" />人員2</div>
<div><input type="checkbox" />人員3</div>
<div><input type="checkbox" />人員4</div>
<div><input type="checkbox" />人員5</div>
<div><input type="checkbox" />人員6</div>
<div><input type="checkbox" />人員7</div>
<div><input type="checkbox" />人員8</div>
<div><input type="checkbox" />人員9</div>
<div><input type="checkbox" />人員10</div>
<div><input type="checkbox" />人員11</div>
</div>
最后,關(guān)于數(shù)據(jù)的加載問題,在當(dāng)前的具體問題中,我打算用Ajax.Updater,來實(shí)現(xiàn)對(duì)相應(yīng)列表的div中數(shù)據(jù)項(xiàng)的填充。
答:在ASP.NET的頁面上,ListBox最終是渲染成select元素,而CheckListBox最終被渲染成div或者是table,使得二者的樣式無法統(tǒng)一,或者說要統(tǒng)一很麻煩。
解決:
于是,決定干脆自行組合一些元素,實(shí)現(xiàn)單選列表、多選列表的統(tǒng)一樣式。
首先,無論是單選列表還是多選列表,都用一個(gè)有邊框的div來做容器:
<div class="list"></div>
然后,在這個(gè)div中添加數(shù)據(jù)項(xiàng)。為了在響應(yīng)onclick事件時(shí),能夠遍歷數(shù)據(jù)項(xiàng),進(jìn)而做一些樣式上的控制,我需要把各個(gè)數(shù)據(jù)項(xiàng)的name屬性設(shè)為一樣的,然后用getElementsByName獲?。ㄟ@種辦法我在復(fù)選框的全選功能上常用)。然而,經(jīng)過實(shí)踐,發(fā)現(xiàn)div、span均無name屬性,最終找到用錨點(diǎn),也就是<a>標(biāo)記,可以實(shí)現(xiàn)。
例如:
復(fù)制代碼 代碼如下:
<div id="divDepartments" class="list">
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門1</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門2</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門3</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門4</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門5</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門6</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門7</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門8</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門9</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門10</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門11</a>
<a name="aDep" style="width:100%" onclick="ItemClicked(this);">部門12</a>
</div>
其中,list樣式:
復(fù)制代碼 代碼如下:
.list
{
overflow-y:scroll;
width:120px;
height:150px;
padding:3px;
border:solid 1px #AFAFAF;
background-color: #ffffff;
cursor: pointer;
}
ItemClicked函數(shù)用來響應(yīng)click事件。下面的代碼只是做一些樣式上的變化,還可繼續(xù)添加加載數(shù)據(jù)的內(nèi)容:
復(fù)制代碼 代碼如下:
function ItemClicked(a){
a.style.backgroundColor="#EEEEEE";
as=document.getElementsByName(a.name);
for(i=0;i<as.length;i++){
if(as[i]!=a){as[i].style.backgroundColor="#FFFFFF";}
}
}
帶有復(fù)選框的多選列表也大同小異,只是這里由于遍歷數(shù)據(jù)項(xiàng)時(shí),只要對(duì)復(fù)選框遍歷即可,故可以使用div做數(shù)據(jù)項(xiàng)的容器了:
復(fù)制代碼 代碼如下:
<div id="divPersons" class="list">
<div><input type="checkbox" />人員1</div>
<div><input type="checkbox" />人員2</div>
<div><input type="checkbox" />人員3</div>
<div><input type="checkbox" />人員4</div>
<div><input type="checkbox" />人員5</div>
<div><input type="checkbox" />人員6</div>
<div><input type="checkbox" />人員7</div>
<div><input type="checkbox" />人員8</div>
<div><input type="checkbox" />人員9</div>
<div><input type="checkbox" />人員10</div>
<div><input type="checkbox" />人員11</div>
</div>
最后,關(guān)于數(shù)據(jù)的加載問題,在當(dāng)前的具體問題中,我打算用Ajax.Updater,來實(shí)現(xiàn)對(duì)相應(yīng)列表的div中數(shù)據(jù)項(xiàng)的填充。
您可能感興趣的文章:
- MVC實(shí)現(xiàn)下拉框聯(lián)動(dòng)效果(單選)
- 詳解ASP.NET MVC之下拉框綁定四種方式
- ASP.NET MVC下拉框聯(lián)動(dòng)實(shí)例解析
- asp.net mvc下拉框Html.DropDownList 和DropDownListFor的常用方法
- 基于MVC3方式實(shí)現(xiàn)下拉列表聯(lián)動(dòng)(JQuery)
- 在.net中用CheckBoxList實(shí)現(xiàn)單選
- asp.net中js+jquery添加下拉框值和后臺(tái)獲取示例
- ASP.NET中DropDownList下拉框列表控件綁定數(shù)據(jù)的4種方法
- asp.net 實(shí)現(xiàn)下拉框只讀功能
- MVC5下拉框綁定的方法(單選)
相關(guān)文章
ASP.NET中生成Excel遇到的問題及改進(jìn)方法
這是在項(xiàng)目中使用的生成Excel的一個(gè)方法(其實(shí)是我在網(wǎng)上收集),用了半年時(shí)間,并未出現(xiàn)異常情況。近日當(dāng)我再次使用該方法生成Excel的時(shí)候出現(xiàn)了問題2011-02-02ADO.NET中的五個(gè)主要對(duì)象的詳細(xì)介紹與應(yīng)用
ADO.NET中的五個(gè)主要對(duì)象:Connection、Command、DataAdapter DataSet、DataReader詳細(xì)介紹與應(yīng)用,感興趣的朋友可以參考下2012-12-12Entity?Framework代碼優(yōu)先Code?First入門
這篇文章介紹了Entity?Framework的代碼優(yōu)先模式Code?First,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06ASP.NET實(shí)現(xiàn)TreeView的XML數(shù)據(jù)源綁定實(shí)例代碼
這篇文章介紹了ASP.NET實(shí)現(xiàn)TreeView的XML數(shù)據(jù)源綁定實(shí)例代碼,有需要的朋友可以參考一下2013-11-11MVC+EasyUI+三層架構(gòu)簡單權(quán)限管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了MVC+EasyUI+三層架構(gòu)簡單權(quán)限管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07Asp.net移除Server,X-Powered-By和X-AspNet-Version頭
這篇文章主要介紹了Asp.net移除Server,?X-Powered-By,?和X-AspNet-Version頭,移除X-AspNet-Version很簡單,只需要在Web.config中增加相應(yīng)配置節(jié),感興趣的朋友一起看看吧2024-02-02ASP.NET頁面借助IFrame提交表單數(shù)據(jù)所遇到問題的解決方法分享
ASP.NET頁面借助IFrame提交表單數(shù)據(jù)所遇到問題的解決方法分享,碰到同樣問題的朋友可以參考下。2011-10-10