求教:如何将子(child) dropdownlist中取的值,赋给上一级 (parent)dropdownlist
在web 客户端,通过css + div模拟了一个 (parent)drop down list,其内部嵌套另一个(child)drop down list, 想将内部子下拉菜单取值后的内容传给外层的drop down list后输出,但不知如何修改代码,求大家帮忙指点一下。以下是代码:
demo.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Custom Drop-Down List Styling</title>
<link rel="stylesheet" type="text/css" href="style.css" />
<link href='http://fonts.googleapis.com/css?family=Lato:300,400,700' rel='stylesheet' type='text/css' />
<script type="text/javascript" src="modernizr.custom.79639.js"></script>
<noscript><link rel="stylesheet" type="text/css" href="noJS.css" /></noscript>
</head>
<body>
<div class="container">
<!-- Codrops top bar -->
<div class="codrops-top"></div><!--/ Codrops top bar -->
<header>
<h1> </h1>
<h2> </h2>
<nav class="codrops-demos"></nav>
</header>
<section class="main">
<div class="wrapper-demo">
<div id="dd" class="wrapper-dropdown-1" tabindex="1">
<span>Select Contact</span>
<ul class="dropdown" tabindex="1">
<li><a href="#">
<form>
<select id="myselect">
<option value="1">Ed Bradley</option>
<option value="2">Contact2</option>
<option value="3">Contact3</option>
</select>
</form>
</a>
</li>
<li><a href="#">
<form>
<select id="myselect">
<option value="0">Select a Saved List</option>
<option value="1">List1</option>
<option value="2">List2</option>
<option value="3">List3</option>
</select>
</form>
</a>
</li>
<li><a href="#">Active Search - 200 Contacts</a></li>
<li><a href="#">All Contacts - 70000 Contacts</a></li>
</ul>
</div>
?</div>
</section>
</div>
<!-- jQuery if needed -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
function DropDown(el) {
this.dd = el;
this.placeholder = this.dd.children('span');
this.opts = this.dd.find('ul.dropdown > li');
this.val = '';
this.index = -1;
this.initEvents();
}
DropDown.prototype = {
initEvents : function() {
var obj = this;
obj.dd.on('click', function(event){
$(this).toggleClass('active');
return false;
});
obj.opts.on('click',function(){
var opt = $(this);
obj.val = opt.text();
obj.index = opt.index();
obj.placeholder.text('Select Contact: ' + obj.val);
});
},
getValue : function() {
return this.val;
},
getIndex : function() {
return this.index;
}
}
$(function() {
var dd = new DropDown( $('#dd') );
$(document).click(function() {
// all dropdowns
$('.wrapper-dropdown-1').removeClass('active');
});
});
</script>
</body>
</html>
style.css
@import url('demo.css');
@import url('font-awesome.css');
/* GLOBALS */
*,
*:after,
*:before {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding: 0;
margin: 0;
}
::selection {
background: transparent;
}
::-moz-selection {
background: transparent;
}
.wrapper-demo {
margin: 60px 0 0 0;
*zoom: 1;
font-weight: 400;
}
.wrapper-demo:after {
clear: both;
content: "";
display: table;
}
/* DEMO 1 */
.wrapper-dropdown-1 {
/* Size and position */
position: relative; /* Enable absolute positionning for children and pseudo elements */
width: 400px;
padding: 10px;
margin: 0 auto;
/* Styles */
background: #9bc7de;
color: #fff;
outline: none;
cursor: pointer;
/* Font settings */
font-weight: bold;
}
.wrapper-dropdown-1:after {
content: "";
width: 0;
height: 0;
position: absolute;
right: 16px;
top: 50%;
margin-top: -6px;
border-width: 6px 0 6px 6px;
border-style: solid;
border-color: transparent #fff;
}
.wrapper-dropdown-1 .dropdown {
/* Size & position */
position: absolute;
top: 100%;
left: 0;
right: 0;
/* Styles */
background: #fff;
list-style: none;
font-weight: normal; /* Cancels previous font-weight: bold; */
/* Hiding */
opacity: 0;
pointer-events: none;
}
.wrapper-dropdown-1 .dropdown li a {
display: block;
text-decoration: none;
color: #9e9e9e;
padding: 10px 20px;
}
/* Hover state */
.wrapper-dropdown-1 .dropdown li:hover a {
background: #f3f8f8;
}
/* Active state */
.wrapper-dropdown-1.active .dropdown {
opacity: 1;
pointer-events: auto;
}
.wrapper-dropdown-1.active:after {
border-color: #9bc7de transparent;
border-width: 6px 6px 0 6px ;
margin-top: -3px;
}
.wrapper-dropdown-1.active {
background: #9bc7de;
background: -moz-linear-gradient(left, #9bc7de 0%, #9bc7de 78%, #ffffff 78%, #ffffff 100%);
background: -webkit-gradient(linear, left top, right top, color-stop(0%,#9bc7de), color-stop(78%,#9bc7de), color-stop(78%,#ffffff), color-stop(100%,#ffffff));
background: -webkit-linear-gradient(left, #9bc7de 0%,#9bc7de 78%,#ffffff 78%,#ffffff 100%);
background: -o-linear-gradient(left, #9bc7de 0%,#9bc7de 78%,#ffffff 78%,#ffffff 100%);
background: -ms-linear-gradient(left, #9bc7de 0%,#9bc7de 78%,#ffffff 78%,#ffffff 100%);
background: linear-gradient(to right, #9bc7de 0%,#9bc7de 78%,#ffffff 78%,#ffffff 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#9bc7de', endColorstr='#ffffff',GradientType=1 );
}
/* No CSS3 support */
.no-opacity .wrapper-dropdown-1 .dropdown,
.no-pointerevents .wrapper-dropdown-1 .dropdown {
display: none;
opacity: 1; /* If opacity support but no pointer-events support */
pointer-events: auto; /* If pointer-events support but no pointer-events support */
}
.no-opacity .wrapper-dropdown-1.active .dropdown,
.no-pointerevents .wrapper-dropdown-1.active .dropdown {
display: block;
}
[解决办法]
这里改下试下
obj.opts.on('click',function(){
var opt = $(this);
var temp = $(this).find('a select');
obj.val = temp.val();
obj.txt = temp.children('option[value='+obj.val+']').text();
obj.index = opt.index();
if(obj.val)
obj.placeholder.text('Select Contact: ' + obj.val +' , ' +obj.txt);
});
[解决办法]
跟着做了一下,的确不错,但这样取内部dropdownlist值正常了,但取其它值失效
顺便问一下,如果内嵌的下级dropdownlist是autocomplete形式,用此方法是否也可以正常取值?再谢!
[解决办法]
CodePorter@163.com