1. 程式人生 > >表單美化-原生javascript和jQuery多選按鈕(相容IE6)

表單美化-原生javascript和jQuery多選按鈕(相容IE6)

前些天我們講了下單選按鈕的美化今天來做表單元素多選按鈕的美化。我們的想法是:利用多選按鈕是否被選中和是否不給選擇的特性來為按鈕的父元素新增對應的樣式,就是說用什麼的樣式是由按鈕的狀態來決定。

用到的圖片

效果


程式碼我就不具體一步一步做了有興趣的童鞋可以參見下我第一篇美化表單的文章http://blog.csdn.net/qianqianyixiao1/article/details/40422769

首先我們用原生的javascript來做這個效果

需要注意的是IE8以下是不支援getElementsByClassName這個方法的,所以這個程式碼就相容的是IE9+;等下我們就來改下程式碼是它滿足IE8以前的瀏覽器,也許你們會問既然不支援getElementsByClassName那換成getElementsByTagName啊!不也同樣可以獲取所有的label嗎?是的換成getElementsByTagName在這裡效果也是可以的,不信大家可以把下面的程式碼複製直接把getElementsByClassName的地方改為getElementsByTagName("label")然後修改下相應的程式碼(我們在下面給出程式碼)效果也是一致的就可以相容IE的老版本了,但是我為什麼要糾結於用類呢?聰明的童鞋大概都已經想到了,這樣做主要是為了程式碼能夠更好的重用大家都知道一個表單裡面的label元素裡面的不可能全部都是多選按鈕對吧 也有可能是單選按鈕,所以我們這裡就給多選按鈕全部新增一個類然後做統一的處理這樣就不會影響其他同樣是label但是下面不是多選按鈕的元素了,除了這種方法,要區別其他元素還有很多方法,例如給單選按鈕的外層增加一個父容器也是可以的,只是這樣會增加許多無用的標籤,具體用什麼的方法大家自己看具體的專案分析。

<span style="font-size:18px;"><!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.checkboxList input{filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);opacity: 0;}
.checkboxList .icon{display: inline-block;width: 20px;height: 20px;background: url(checkbox.png) -90px 0 no-repeat;position: absolute;left: 0;top: 0;}
.checkboxList{position: relative;}
.checkbox_checked .icon{background-position: -60px -30px;}
.checkbox_disabled .icon{background-position: 0 -90px;}
</style>
<script type="text/javascript">
function showcheckbox(){  
    var checkbox_parent="checkboxList";  /*宣告幾個變數*/
var checked_checkbox_css="checkbox_checked";
var disabled_checkbox_css="checkbox_disabled";
       var lable=document.getElementsByClassName(checkbox_parent);/*獲取所有類名為checkboxList ,注意了 getElementsByClassName()獲取的是一個數組,IE8以下是不支援getElementsByTagName這個方法的*/
for(var i=0;i<lable.length;i++){  /*遍歷所有的lable*/
lable[i].setAttribute("class",checkbox_parent); /*首先每執行該函式的時候都把lable的類還原為只有checkboxList*/
var input=lable[i].getElementsByTagName("input")[0]; /*然後獲取當前lable裡面的input*/
var oldClass=input.parentNode.getAttribute("class"); /*然後獲取當前lable的類*/
var newClass=oldClass+" "+checked_checkbox_css;  /*建立一個變數存放checkboxList和checkbox_checked*/
var newClass2=oldClass+" "+disabled_checkbox_css; /*建立一個變數存放checkboxList和checkbox_disabled*/
if(input.checked){  /*然後判斷input是否給選中*/
input.parentNode.className=newClass;  /*是的話就給它的父節點的類為newClass*/
}else if(input.disabled){ /*然後判斷input是否不給選中*/
                input.parentNode.className=newClass2; /*是的話就給它的父節點的類為newClass2*/
}else{
                input.parentNode.className=oldClass; /*都不滿足的話給它的父節點的類為noldClass*/
}
}
}
window.onload=function(){   /*頁面載入完畢執行一個匿名函式*/
var lable=document.getElementsByClassName("checkboxList");  /*首先獲取頁面所有類為checkboxList的lable元素,注意getElementsByClassName()獲取的是一個數組*/
for(var i=0;i<lable.length;i++){ /*然後我們遍歷所有篩選出來的lable元素*/
        lable[i].onclick=function(){ /* 為它們每個都繫結一個點選事件*/
        showcheckbox();  /*當它們中的任何一個觸發即被點選的時候都執行函式showcheckbox*/
        }
}
showcheckbox(); /*就算沒有點選lable元素,頁面在每次載入的時候都執行一次函式showcheckbox*/
}
</script>

</head>
<body>
<form action="#">
<label class="checkboxList" for="checkbox1">
<span class="icon"></span>
        <input type="checkbox" id="checkbox1" checked="checked">
        Unchecked
     </label>
     <label class="checkboxList" for="checkbox2">
<span class="icon"></span>
        <input type="checkbox" id="checkbox2">
        Unchecked
     </label>
     <label class="checkboxList" for="checkbox3">
<span class="icon"></span>
        <input type="checkbox" id="checkbox3">
        Unchecked
     </label>
     <label class="checkboxList" for="checkbox4">
<span class="icon"></span>
        <input type="checkbox" id="checkbox4">
        Unchecked
     </label>
     <label class="checkboxList" for="checkbox5">
<span class="icon"></span>
        <input type="checkbox" id="checkbox5" disabled="disabled">
        Unchecked
     </label> 
</form>
</body>
</html></span>

換成getElementsByTagName後的程式碼如下,現在的程式碼是相容IE5+,因為我的機子最低的就是IE5,大家有的可以用其他來測試下,當然了 現在我們只需相容到IE7就好了,也許有的還要相容ie6,具體的看自己的需求吧。

<span style="font-size:18px;"><!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.checkboxList input{filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);opacity: 0;}
.checkboxList .icon{display: inline-block;width: 20px;height: 20px;background: url(checkbox.png) -90px 0 no-repeat;position: absolute;left: 0;top: 0;}
.checkboxList{position: relative;}
.checkbox_checked .icon{background-position: -60px -30px;}
.checkbox_disabled .icon{background-position: 0 -90px;}
</style>
<script type="text/javascript">
function showcheckbox(){  
    var checkbox_parent="checkboxList";  
var checked_checkbox_css="checkbox_checked";
var disabled_checkbox_css="checkbox_disabled";
       var lable=document.getElementsByTagName("label");/*這裡是修改的地方*/
for(var i=0;i<lable.length;i++){  
lable[i].setAttribute("class",checkbox_parent); 
var input=lable[i].getElementsByTagName("input")[0]; 
var oldClass=input.parentNode.getAttribute("class"); 
var newClass=oldClass+" "+checked_checkbox_css; 
var newClass2=oldClass+" "+disabled_checkbox_css; 
if(input.checked){  
input.parentNode.className=newClass;  
}else if(input.disabled){ 
                input.parentNode.className=newClass2;
}
else{
                input.parentNode.className=oldClass; 
}
}
}
window.onload=function(){   
var lable=document.getElementsByTagName("label"); /*這裡是修改的地方*/
for(var i=0;i<lable.length;i++){ 
        lable[i].onclick=function(){
        showcheckbox();  
        }
}
showcheckbox(); 
}
</script>


</head>
<body>
 <!-- 相容所有主流瀏覽器和ie5+  -->
<form action="#">
<label class="checkboxList" for="checkbox1">
<span class="icon"></span>
        <input type="checkbox" id="checkbox1" checked="checked">
        Unchecked
     </label>
     <label class="checkboxList" for="checkbox2">
<span class="icon"></span>
        <input type="checkbox" id="checkbox2">
        Unchecked
     </label>
     <label class="checkboxList" for="checkbox3">
<span class="icon"></span>
        <input type="checkbox" id="checkbox3">
        Unchecked
     </label>
     <label class="checkboxList" for="checkbox4">
<span class="icon"></span>
        <input type="checkbox" id="checkbox4">
        Unchecked
     </label>
     <label class="checkboxList" for="checkbox5">
<span class="icon"></span>
        <input type="checkbox" id="checkbox5" disabled="disabled">
        Unchecked
     </label> 
</form>
</body>
</html></span>

javascript最終版

<span style="font-size:18px;"><!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.checkboxList input{filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);opacity: 0;}
.checkboxList .icon{display: inline-block;width: 20px;height: 20px;background: url(checkbox.png) -90px 0 no-repeat;position: absolute;left: 0;top: 0;}
.checkboxList{position: relative;}
.checkbox_checked .icon{background-position: -60px -30px;}
.checkbox_disabled .icon{background-position: 0 -90px;}
</style>
<script type="text/javascript">
function getClassName(classname,idbox){  /* 獲取含有某個類的函式*/


var box=document.getElementById(idbox);  
var cbox=box || document;  
var cbox_elem=cbox.getElementsByTagName('*'); 
var ctag=new Array(); 
for(var i=0;i<cbox_elem.length;i++){   
var cur_else=cbox_elem[i];  
var classnames=cur_else.className.split(' ');
for(var j=0;j<classnames.length;j++){ 

if(classnames[j]==classname){  
ctag.push(cur_else); 
break; 
}
}
}
return  ctag;
}

function showcheckbox(){  
    var checkbox_parent="checkboxList";  
var checked_checkbox_css="checkbox_checked";
var disabled_checkbox_css="checkbox_disabled";
        var lable=getClassName(checkbox_parent);/*這裡是修改的地方*/


for(var i=0;i<lable.length;i++){ 
lable[i].setAttribute("class",checkbox_parent); 
var input=lable[i].getElementsByTagName("input")[0]; 
var oldClass=input.parentNode.getAttribute("class"); 
var newClass=oldClass+" "+checked_checkbox_css; 
var newClass2=oldClass+" "+disabled_checkbox_css; 
if(input.checked){  
input.parentNode.className=newClass;  
}else if(input.disabled){ 
                input.parentNode.className=newClass2;
}
else{
                input.parentNode.className=oldClass; 
}
}
}
window.onload=function(){   
var lable=document.getElementsByTagName("label"); /*這裡是修改的地方*/
for(var i=0;i<lable.length;i++){ 
        lable[i].onclick=function(){
        showcheckbox();  
        }
}
showcheckbox(); 
}
</script>

</head>
<body>
 <!-- 相容所有主流瀏覽器和ie5+  -->
<form action="#" >
<label class="checkboxList" for="checkbox1">
<span class="icon"></span>
        <input type="checkbox" id="checkbox1" checked="checked">
        Unchecked
     </label>
     <label class="checkboxList" for="checkbox2">
<span class="icon"></span>
        <input type="checkbox" id="checkbox2">
        Unchecked
     </label>
     <label class="checkboxList" for="checkbox3">
<span class="icon"></span>
        <input type="checkbox" id="checkbox3">
        Unchecked
     </label>
     <label class="checkboxList" for="checkbox4">
<span class="icon"></span>
        <input type="checkbox" id="checkbox4">
        Unchecked
     </label>
     <label class="checkboxList" for="checkbox5">
<span class="icon"></span>
        <input type="checkbox" id="checkbox5" disabled="disabled">
        Unchecked
     </label> 
</form>
</body>
</html>
</span>

然後我們用jQuery:慣例我們測試的是IE5+

<span style="font-size:18px;"><!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.checkboxList input{filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);opacity: 0;}
.checkboxList .icon{display: inline-block;width: 20px;height: 20px;background: url(checkbox.png) -90px 0 no-repeat;position: absolute;left: 0;top: 0;}
.checkboxList{position: relative;}
.checkbox_checked .icon{background-position: -60px -30px;}
.checkbox_disabled .icon{background-position: 0 -90px;}
</style>
<script  src="jquery-1.11.1.min.js"></script> 
<script type="text/javascript"> 
var checkbox_parent=".checkboxList";
var checkbox_input=checkbox_parent+" input[type='checkbox']";
var checked_checkbox_css="checkbox_checked";
var disabled_checkbox_css="checkbox_disabled";




function  showCheckbox(){   
if($(checkbox_parent).length){ /*每次執行showCheckbox()都判斷是否有.checkboxList不為0則有.checkboxList就執行裡面的程式碼*/
$(checkbox_parent).each(function() {  /*第一步先把每個.checkboxList裡的.checkbox_checked都清除*/
$(this).removeClass(checked_checkbox_css);
});
$(checkbox_input+":checked").each( function() { /*第二步先把每個.checkboxList裡選中的按鈕都篩選出來然後給它的父元素新增.checkbox_checked*/
$(this).parent(checkbox_parent).addClass(checked_checkbox_css);
});
$(checkbox_input+":disabled").each( function() { /*第三步先把每個.checkboxList裡不能選中的按鈕都篩選出來然後給它的父元素新增.checkbox_disabled*/
$(this).parent(checkbox_parent).addClass(disabled_checkbox_css);
});
}
}
$(function(){
$(checkbox_parent).click(function() {    /*當任何一個.checkboxList被點選的時候都執行一次showCheckbox()*/
showCheckbox();
});
showCheckbox();  /* 頁面每次載入的時候都執行一次showCheckbox()*/
})
</script>

</head>
<body>
<form action="#">
<label class="checkboxList" for="checkbox1">
<span class="icon"></span>
        <input type="checkbox" id="checkbox1" checked="checked">
        Unchecked
     </label>
     <label class="checkboxList" for="checkbox2">
<span class="icon"></span>
        <input type="checkbox" id="checkbox2">
        Unchecked
     </label>
     <label class="checkboxList" for="checkbox3">
<span class="icon"></span>
        <input type="checkbox" id="checkbox3">
        Unchecked
     </label>
     <label class="checkboxList" for="checkbox4">
<span class="icon"></span>
        <input type="checkbox" id="checkbox4">
        Unchecked
     </label>
     <label class="checkboxList" for="checkbox5">
<span class="icon"></span>
        <input type="checkbox" id="checkbox5" disabled="disabled">
        Unchecked
     </label>

</form>

</body>
</html></span>

知識點:

1:變數:

javascript是一種弱語言,不同於JAVA這般強語言,宣告變數的時候要一定要指明資料型別然後賦值的時候也一定要按照宣告時的資料型別來賦值。javascript不需要宣告事先宣告將要儲存的資料型別,賦值的時候開始是字元型別後來是數值型別也是可以的。

  javascript中要用var 來為變數在記憶體裡預留空間。變數主要儲存在機子的記憶體中,這樣就明顯的提高了執行的效率。在關閉頁面或者重新載入頁面的時候或者重新賦值時,javascript中垃圾回收機制會把原來變數撤銷,把記憶體空出來。

2:for 重複執行同一程式碼塊(當需要重複的次數已知的時候用for比較合適)

for (語句 1; 語句 2; 語句 3)
  {
  被執行的程式碼塊
  }
語句1:宣告一個變數用來跟蹤程式碼執行的次數;

語句2:程式碼塊執行的條件;

語句3:每次執行程式碼塊後改變變數(遞增或者遞減)

javascript第一次遇到for語句時,初始化變數,這個行為只執行一次。然後判斷條件是否為TRUE,條件為TRUE則執行程式碼塊裡面的內容,執行完程式碼塊裡的內容後遞增或遞減變數,變數改變後再來判斷條件是否為TRUE,為TRUE則執行程式碼塊內容,然後再改變變數再判斷再執行,一直重複直到條件為FALSE退出for執行for語句後面的程式碼。

3:if語句:

if (條件)
  {
  當條件為 true 時執行的程式碼
  }
else
  {
  當條件不為 true 時執行的程式碼
  }

javascript中的語句都是從上到下依次執行的,但有時候我們想改變這樣的執行順序。那麼我們就可以用if語句,當條件為TRUE的時候就執行緊接著的程式碼塊然後退出if語句執行if語句後的程式碼,如果條件不為TRUE那麼就執行else語句裡的程式碼塊然後退出if語句執行if語句後的程式碼。

程式碼下載

fo  gfdsgfd=

相關推薦

美化-原生javascriptjQuery按鈕相容IE6

前些天我們講了下單選按鈕的美化今天來做表單元素多選按鈕的美化。我們的想法是:利用多選按鈕是否被選中和是否不給選擇的特性來為按鈕的父元素新增對應的樣式,就是說用什麼的樣式是由按鈕的狀態來決定。 用到的圖片 效果 程式碼我就不具體一步一步做了有興趣的童鞋可以參見下我第一篇美

原生javascriptjQuery的遍歷方法

找得可能不完整 歡迎補充指教 DOM遍歷 一共四種: parentNode(遍歷第一個父節點) childNodes(遍歷所有子節點) nextSibling(遍歷下一個位元組點) previousSibling(遍歷上一個子節點) <body> <div&

SpringBoot防止重複請求,重複提交超級簡單的註解實現之四終極版

前言:上篇文章有的童鞋說不行啊,怎麼不能防止重複提交呢! 首先需要說明的是之前的防止重複提交是指:一次請求完成之前防止重複提交,當然擴充套件下就可以做到會話間防止重複提交,還可以擴充套件為某個時間段或者永久防止重複提交(這個我就不實現了),下面我來擴充套件一下相同會話防止重

簡單講解KMP模式匹配與AC演算法模式匹配KMP篇

前言 本篇是對於KMP單模式匹配以及AC演算法多模式匹配的簡單講解,KMP演算法與AC演算法是關鍵字檢索中的常見演算法,能夠快速而高效地查找出目標字串中的多個關鍵字的匹配情況,而要檢索的關鍵字通常被稱為模式串,因此模式匹配四個字也就好理解了。網上的很多對於KMP的講解總是結

上傳檔案formenctype="multipart/form-data"傳值解決辦法代原始碼

四個檔案原始碼分別為: web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://ww

bootstrap下拉bootstrap-select

前端用vue+bootstrap,需求是做可多選下拉框。 首先附上該外掛的下載地址。 要使用該外掛在引入jquery.js和bootstrap.js後還需要引入以上地址資源中的 bootstrap-select.min.css 和 bootstrap-select.m

推薦幾款很棒的 JavaScript 美化驗證外掛

  表單元素讓人愛恨交加。作為網頁最重要的組成部分,表單幾乎無處不在,從簡單的郵件訂閱、登陸註冊到複雜的需要多頁填寫的資訊提交功能,表單都讓開發者花費了大量的時間和精力去處理,以期實現好用又漂亮的表單功能。這篇文章向大家推薦幾款很棒的 JavaScript 表單美化和驗證外掛。 您可能感興趣的相關文章

JavaScriptjquery取消提交

JavaScript取消表單提交: 1、表單提交事件onsubmit,事件函式返回false時,可以取消表單的提交。 用法示例:onsubmit="return func();"或者form.onsubmit=function(){return false;} &l

原生javascript下拉框美化例項教程

html的表單有很強大的功能,在web早期的時候,表單是頁面向伺服器發起通訊的主要渠道。但有些表單元素的樣式沒辦法通過新增css樣式來達到滿意的效果,而且不同的瀏覽器之間設定的樣式還存在相容問題,比如下拉框。 本例項通過建立div和li等元素來生成一個模擬下拉框,以達到美化下拉框的效果。學習本教程之前,讀者需

JavaScript 驗證不為空獲取select下拉列表的值和文本

blog car form 是你 mys 獲取 document options 身份證 1.驗證表單不為空 var hasform = { "Name": "名字", "Id_card": "身份證", "PaySalary": "月工資",

Java學習總計二十六——JavaScript正則表達式,Js驗證,原生js+css頁面時鐘

text 先來 helloword 郵箱 用戶名 就是 lac round 外部 一.JavaScript正則表達式1.exec檢索字符串中指定的值,返回找到的值,並確定其位置2.test檢索字符串中指定的值,返回true或false3.正則表達式對象的創建:(1)方式一:

1、Jquery formajax提交 2、jquery.filter校驗個相同型別的文字框是否輸入資料有重複

JSP引用該JS <script type="text/javascript" src="http://malsup.github.com/jquery.form.js"></script> 表單儲存按鈕 onclick=save(); func

Jquery按鈕 非同步同步提交

前臺部分程式碼: <form class="addSud" method="post" action=""> <table> <tr> <td class="textRight">姓名</td&

JQuery 設定 元素的 readonly disabled 屬性

在做系統的時候使用到了Jquery 來控制元素 可讀屬性,所以就歸納了下,簡單稱述以供參考。 readonly 相關使用: $('input').attr("readonly","readonly")//將input元素設定為readonly $('input').remo

利用原生jsjQuery實現框的勾取消操作

根據以下的Demo,大概就可以看的明白 Demo: <html> <head> <script src='jquery-1.9.1.min.js'></sc

原生nodejs在koa中獲取提交的資料 利用koa-bodyparser

module資料夾下的 common.js方法封裝 exports.getPostData=function(ctx){ return new Promise(function(resolve,reject){//需要返回一個promise物件

跨域問題相關知識詳解原生jsjquery兩種方法實現jsonp跨域

syn con 加載 developer 兩種方法 ray exe 編寫 分組 1、同源策略 同源策略(Same origin policy),它是由Netscape提出的一個著名的安全策略。同源策略是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽

原生JSjquery裏面的DOM操作進行了一下整理

ont child ace attr move 節點 沒有 設置 復制 創建元素節點 1.原生: document.createElement("div") 2.jquery: $("<div></div>") 創建文本節點並加入元素節點中

html5 填表 select 下拉 textarea行文本 output Js計算結果

size area 如果 out ctrl select png 多行文本 賦值 <select> 下拉 <select>下有很多屬性 name 其實有name就有value了,因為button提交的都是? nam

添加ipurl 當前時間

() com rip http return date src cnblogs name <input name="url" type="hidden" id="url"> <input name="ip" type="hidden" id="