麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

原生javascript自定義input[type=radio]效果示例

2019-11-19 10:57:29
字體:
供稿:網(wǎng)友

本文實例講述了原生javascript自定義input[type=radio]效果。分享給大家供大家參考,具體如下:

找到最為簡單的僅僅使用css3的方案

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>Document</title>  <style type="text/css">  input[type="radio"]+label::before {    content: "";    /*不換行空格*/    display: inline-block;    vertical-align: middle;    font-size: 18px;    width: 10px;    height: 10px;    margin-right: 10px;    border-radius: 50%;    border: 2px solid #01cd78;    text-indent: 15px;    line-height: 1;    padding: 4px;  }  input[type="radio"]:checked+label::before {    background-color: #01cd78;    background-clip: content-box;  }  input[type="radio"] {    position: absolute;    clip: rect(0, 0, 0, 0);  }  </style></head><body>  <div class="female">    <input type="radio" id="female" name="sex" checked="" />    <label for="female">女</label>  </div>  <div class="male">    <input type="radio" id="male" name="sex" />    <label for="male">男</label>  </div></body></html>

在最近的一次開發(fā)中,或者在之前的開發(fā)中,經(jīng)常性的用到單選框這個form表單元素。而ui給出的設(shè)計方案絕對也不是原生的radio樣式,面對這種場景,自定義radio效果成為一種解決方案。

直接上圖,如下

測試代碼,如下

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>自定義radio和checkbox</title>  <style type="text/css">  #ceshi label input {    display: none;  }  #ceshi label span {    display: inline-block;    width: 18px;    height: 18px;    border-radius: 50%;    border: 2px solid #ddd;    box-sizing: border-box;    position: relative;    top: 3px;    margin-right: 6px;  }  #ceshi label span.active {    border: 3px solid red;  }  </style></head><body>  <form id="ceshi" action="test.php" method="get">    <label>      <span></span>      <input type="radio" name="t" value="這是測試1">這是測試1    </label>    <label>      <span></span>      <input type="radio" name="t" value="這是測試2">這是測試2    </label>    <label>      <span></span>      <input type="radio" name="t" value="這是測試3">這是測試3    </label>    <input type="submit" name="" value="提交">  </form>  <script type="text/javascript">    Object.prototype.siblings = function() {      var arr = []; //保存兄弟節(jié)點       var prev = this.previousSibling; //o的前一個同胞節(jié)點       //先往上查詢兄弟節(jié)點       while (prev) {        if (prev.nodeType == 1 && prev.tagName == this.tagName) {          arr.unshift(prev); //數(shù)組首部插入數(shù)組,保證節(jié)點順序         }        prev = prev.previousSibling; //把上一節(jié)點賦值給prev       }      //往下查詢兄弟節(jié)點       var next = this.nextSibling; //o的后一個同胞節(jié)點       while (next) {        if (next.nodeType == 1 && next.tagName == this.tagName) {          arr.push(next); //數(shù)組尾部插入,保證節(jié)點順序         }        next = next.nextSibling; //下一節(jié)點賦值給next,用于循環(huán)       }      return arr;    }    //判斷HTMLElement是否含有某個class    Object.prototype.hasClass = function(cls) {      return this.className.match(new RegExp('(//s|^)' + cls + '(//s|$)'));    }    //HTMLElement對象添加類    Object.prototype.addClass = function(cls) {      if (!this.hasClass(cls)) this.className += " " + cls;    }    //HTMLElement對象刪除類    Object.prototype.removeClass = function(cls) {      if (this.hasClass(cls)) {        var reg = new RegExp('(//s|^)' + cls + '(//s|$)');        this.className = this.className.replace(reg, ' ');      }    }    function nativeSelfRadio(dom) {      dom.getElementsByTagName("span")[0].addClass("active");      dom.siblings().forEach(function(ele, val) {        ele.getElementsByTagName("span")[0].removeClass('active');        //ele.getElementsByTagName("span")[0].classList.remove('active');      })    }    //綁定事件    var len=document.getElementById("ceshi").getElementsByTagName("label");    for (var i = 0; i < len.length; i++) {      len[i].getElementsByTagName("input")[0].checked=false;//設(shè)置不選中      len[i].onclick=function(){         nativeSelfRadio(this);      }    }  </script></body></html>

最初開發(fā)時候,也習慣了用jquery,但慢慢也意識到原生不熟走不遠的道理,于是開始各種原生實現(xiàn)。上述測試代碼均采用原生js實現(xiàn);

本人覺得需要關(guān)注的地方有:

1)、函數(shù)掛載的原型對象是HTMLElement,實際原型對象寫為Object也是可以的

2)、添加或者刪除類可以自己來寫,也可以用HTML5的接口classList,添加或者刪除類

3)、避免返回該頁面,radio依然為選中狀態(tài),需要加載完頁面后將radio選中狀態(tài)設(shè)置為false,如果業(yè)務(wù)需要單獨選中哪個,就需要定制了

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具http://tools.VeVB.COm/code/HtmlJsRun測試上述代碼運行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《JavaScript操作DOM技巧總結(jié)》、《JavaScript頁面元素操作技巧總結(jié)》、《JavaScript事件相關(guān)操作與技巧大全》、《JavaScript查找算法技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript錯誤與調(diào)試技巧總結(jié)

希望本文所述對大家JavaScript程序設(shè)計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲一区二区成人 | 91在线视频福利 | 成片免费观看大全 | 国产91久久久久 | 国产亚洲精品精 | 精品国产一区二区三区四区阿崩 | av日韩一区二区三区 | xxx日本视频 | 久草干| 91网视频| 国产精品aⅴ | 成人免费自拍视频 | 538在线精品 | 狠狠操操| 一级黄色在线免费观看 | 精品久久久久久中文字幕 | 亚洲视频精选 | 国产超碰人人做人人爱ⅴa 国产精品久久久久久久hd | 免费h片 | 国产一区视频免费观看 | 精久久久| 1级黄色毛片 | 成年人在线视频 | 91麻豆精品国产91久久久无需广告 | 国产免费视频在线 | 国产亚洲精品久久午夜玫瑰园 | 九九热九九爱 | 成人精品视频在线 | 国产成人精品区一区二区不卡 | 精品一区二区三区免费视频 | 亚洲日本韩国精品 | 97zyz成人免费视频 | 精品国产精品久久 | 毛片大全在线观看 | 日韩黄网站 | 另类亚洲孕妇分娩网址 | 国产午夜精品一区二区三区不卡 | 最新中文字幕日本 | 国产成人精品免费视频大全最热 | 一级做a爰片性色毛片2021 | 精品一区二区三区免费爱 |