秒客网

秒客网
  • 首页
  • 网络编程
    • Java
    • C/C++
    • 编程技术
    • Android
    • C#
    • VB
    • R语言
    • JavaScript
    • Swift
    • IOS
    • PHP
    • ASP.NET
    • ASP
    • 正则表达式
    • 易语言
    • vb.net
    • C语言
    • Python
    • Golang
    • bat
    • VBS
    • perl
    • Lua
    • Dos
    • Ruby
    • VBA
    • PowerShell
    • Erlang
    • autoit
  • 网络运营
    • 建站经验
    • 网络安全
    • 网站优化
    • 网站运营
    • 站长资源
  • 数据库
    • Redis
    • Oracle
    • Mysql
    • Sql Server
    • Access
    • mariadb
    • DB2
    • PostgreSQL
    • Sqlite
    • MongoDB
    • 数据库技术
    • Mssql
  • 服务器系统
    • Linux
    • Ubuntu
    • Centos
    • Windows10
    • Windows7
    • 系统进程
    • Bios
    • Fedora
    • Windows11
    • Solaris
    • 注册表
    • windows server
  • 服务器技术
    • 云服务器
    • 虚拟主机
    • DNS服务器
    • Nginx
    • FTP服务器
    • 服务器其它
    • 服务器安全
    • WEB服务器
    • Tomcat
    • 邮件服务器
    • IIS
    • 虚拟服务器
  • 建站程序
    • Wordpress
    • 极致CMS
    • ZBLOG
    • PHPCMS
    • DEDECMS
    • 帝国CMS
    • Discuz
    • 苹果CMS
    • ECSHOP
    • CMS系统
  • 电脑知识
    • 网络技术
    • 组装电脑
    • 软件教程
    • 电脑硬件
  • 数码知识
    • 智能家居
    • 智能电视
    • 机顶盒
    • 智能音箱
    • 手表手环
    • VR/AR
    • VR之家
  • 游戏
    • 手机游戏
    • 单机游戏
    • 网络游戏
  • 综合资讯
    • 百科知识
当前位置: 首页 >自己动手模拟百分百下拉列表
时间:2023-03-09 15:09:46
自己动手模拟百分百<select>下拉列表

浏览器默认的下拉确实不好用啊,主要是样式不好修改和统一。

(一)下手之前先理清一下<select>的流程:

  1.结构:<select>

      <option value="">show</option>      

</select>

  2.事件:点击<select>-选择<option>-显示option的innerHTML-表单value改变-onchange被触发

(二)接着写出dom结构并设计一个样式:

  1.dom结构如下:

<div id="selectYear">
<div class="select-ipt"></div><!--显示框,存放span的innerHTML,相当于option的innerHTML-->
<div style="display: none " class="select-list"><!--下拉框-->
<span id="1">1992</span><!--N个span-->
</div>
<input type="hidden" /><!--存放span的id,相当于option的value-->
</div>

  2.css样式,下拉框需要一个下三角图片居右,图片就不上传了,也可以自己用css模拟下三角。样式可以定义多种,样式名称改变不会影响js。

/*下拉框*/
.select-ipt {color:#888888;cursor: pointer;background: url(select.jpg) no-repeat center right;
border:1px #ccc solid;cursor:pointer;width:73px;height: 29px;margin:0px 0px 0px 0px;padding:3px 0px 0px 0px;
line-height:29px;font-size:14px;}
/*样式一:下拉一排一个*/
.select-list {border: 1px #ccc solid;width:73px;margin-left:0px;position:absolute;z-index:;background:#fff;}
.select-list span{cursor:pointer;display:block;width:100%;height:22px;line-height:22px;padding:;font-size:14px;}
.select-list span:hover{background:#f6615b;color:#fff}

(三)开始写JS:

1.根据id绑定dom

function SelectPullDown(box){
this.selectBox = document.getElementById(box);
this.selectIpt = document.getElementById(box).getElementsByTagName("input")[0];//传值表单
this.selectDivBtn = document.getElementById(box).getElementsByTagName("div")[0];//选中显示框
this.selectDivList = document.getElementById(box).getElementsByTagName("div")[1];////下拉框
this.selectSpan = document.getElementById(box).getElementsByTagName("span");//选项
}
//调用方法
var year = new SelectPullDown('selectYear');
year.init();

2.定义原型方法,开始模拟:

很简单,主要就是定义显示隐藏和点击事件,然后修改值,最后手动触发onchange事件,onchange事件必须有,方便以后的js验证。

SelectPullDown.prototype ={
selectBox : '',
selectIpt : '',
selectDivBtn : '',
selectDivList : '',
selectSpan : '',
iptEven : function(){
var self = this;
this.selectBox.onmouseover = function(){
self.selectListShow();
}
this.selectBox.onmouseout = function(){
self.selectListHide();
}
return this;
},
selectListShow: function(){
this.selectDivList.style.display = "block";
},
selectListHide: function(){
this.selectDivList.style.display = "none";
},
selectPick : function() {
var span = this.selectSpan,
self = this;
function trimStr(str){return str.replace(/(^\s*)|(\s*$)/g,"");}
for(var i=0;i<span.length;i++){
span[i].onclick = function(){
self.selectDivBtn.innerHTML = trimStr(this.innerHTML);
self.selectIpt.value= trimStr(this.id);
self.selectListHide();
//chang事件触发
if (self.selectIpt.fireEvent) self.selectIpt.fireEvent('onchange');
else{
var evt;
evt = document.createEvent("HTMLEvents");
evt.initEvent("change", true, true);
self.selectIpt.dispatchEvent(evt);
};
}
}
return this;
},
init : function(){
this.iptEven().selectPick();
}
};

(四)完整代码如下(试着用下吧):

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>下拉表单</title>
<style type="text/css">
* {
margin:0px;
padding:0px;
}
body {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
}
/*下拉框*/
.select-ipt {color:#888888;cursor: pointer;background: url(select.jpg) no-repeat center right;
border:1px #ccc solid;cursor:pointer;width:73px;height: 29px;margin:0px 0px 0px 0px;padding:3px 0px 0px 0px;
line-height:29px;font-size:14px;}
/*样式一:下拉一排一个*/
.select-list {border: 1px #ccc solid;width:73px;margin-left:0px;position:absolute;z-index:10000;background:#fff;}
.select-list span{cursor:pointer;display:block;width:100%;height:22px;line-height:22px;padding:0;font-size:14px;}
.select-list span:hover{background:#f6615b;color:#fff} </style>
</head>
<body>
<div id="selectYear">
<div class="select-ipt">请选择</div><!--显示框,存放span的innerHTML,相当于option的innerHTML-->
<div style="display: none " class="select-list"><!--下拉框-->
<span id="1">1992</span>
<span id="2">1993</span>
<span id="3">1994</span>
<span id="4">1995</span>
<span id="5">1996</span>
<span id="6">1997</span>
</div>
<input type="hidden" /><!--存放span的id,相当于option的value-->
</div> <script type="text/javascript" >
function SelectPullDown(box){
this.selectBox = document.getElementById(box);
this.selectIpt = document.getElementById(box).getElementsByTagName("input")[0];//传值表单
this.selectDivBtn = document.getElementById(box).getElementsByTagName("div")[0];//选中显示框
this.selectDivList = document.getElementById(box).getElementsByTagName("div")[1];////下拉框
this.selectSpan = document.getElementById(box).getElementsByTagName("span");//选项
}
SelectPullDown.prototype ={
selectBox : '',//document.getElementById('selectYear').getElementsByTagName("input")[0],
selectIpt : '',//document.getElementById('selectYear').getElementsByTagName("input")[0],
selectDivBtn : '',//document.getElementById('selectYear').getElementsByTagName("div")[0],
selectDivList : '',//document.getElementById(box).getElementsByTagName("div")[1];
selectSpan : '',//document.getElementById('selectYear').getElementsByTagName("span"),
iptEven : function(){
var self = this;
this.selectBox.onmouseover = function(){
self.selectListShow();
}
this.selectBox.onmouseout = function(){
self.selectListHide();
}
return this;
},
selectListShow: function(){
this.selectDivList.style.display = "block";
},
selectListHide: function(){
this.selectDivList.style.display = "none";
},
selectPick : function() {
var span = this.selectSpan,
self = this;
function trimStr(str){return str.replace(/(^\s*)|(\s*$)/g,"");}
for(var i=0;i<span.length;i++){
span[i].onclick = function(){
self.selectDivBtn.innerHTML = trimStr(this.innerHTML);
self.selectIpt.value= trimStr(this.id);
self.selectListHide();
//chang事件触发
if (self.selectIpt.fireEvent) self.selectIpt.fireEvent('onchange');
else{
var evt;
evt = document.createEvent("HTMLEvents");
evt.initEvent("change", true, true);
self.selectIpt.dispatchEvent(evt);
};
}
}
return this;
},
init : function(){
this.iptEven().selectPick();
}
};
//调用方法
var year = new SelectPullDown('selectYear');
year.init(); </script>
</body>
</html>

相关文章

  • select表单元素详解及下拉列表模拟实现
上一篇:Effective Java Chapter4 Classes and Interface
下一篇:php验证复选框有效性的示例

推荐文章

  • bind 跟服务器修改,DNS服务(bind9)配置过程
  • .Net Core建站(2):EF Core+CodeFirst数据库迁移
  • Ubuntu上安装PHP环境-mysql+apache+php-Linux操作系统
  • 从零开始搭建前后端分离的NetCore(EF Core CodeFirst+Au)+Vue的项目框架之二autofac解耦
  • 点云文件常用格式转换(pcd,txt,ply,obj,stl)
  • 使用 git push 出现error setting certificate verify locations问题记录
  • 【已解决】error setting certificate verify locations报错
  • makefile的命令包定义及使用
  • c++内存分配(new和delete)
  • [HTML/HTML5]2 CSS样式表设置

相关下载

  • jQ - select(下拉列表)下载
  • select级联下拉列表下载
  • 模拟select选择配送城市下拉列表菜单下载
  • select模拟多选下拉下载
  • Select下拉列表框下载
  • 最新编程技术文章
  • 网站地图

Copyright © 2021-2022 www.miaokee.com 秒客网 备案号:粤ICP备2021167564号

免责声明:本站文章多为用户分享,部分搜集自互联网,如有侵权请联系站长,我们将在72小时内删除。

