求代码,来解决两个下拉框的联动

panzhixiong_cn 2012-10-31 11:17:07
我有两个下拉框,分别为:
下拉框一
<select onchange="A(this)" name="STy1" id="STy1" size="1"><option value="sn" selected="true">Family/Last Name</option><option value="cn">Full Name</option><option value="id">ID</option></select>

和下拉框二
<select name="SLk1" id="SLk1" size="1"><option value="OBW">That Begins With</option><option value="OOS">That Contains</option><option value="OEM">That Equals</option></select>


我现在想知道怎么写js的function A(obj),来实现以下功能。
1)选中下拉框一的ID,下拉框二中就只剩“That Equals”选项。
2)选中下拉框一的“Family/Last Name”或者“Full Name”,下拉框二中所有选项都可选,默认选中“That Begins With”。

非常感谢!
...全文
188 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq137051908 2012-10-31
  • 打赏
  • 举报
回复
<html>
<head>
<title>demo</title>
</head>
<body>
<select onchange="A(this)" name="STy1" id="STy1" size="1">
<option value="sn" selected="selected" show="OBW,OOS,OEM" defvalue="OBW">Family/Last Name</option>
<option value="cn" show="OBW,OOS,OEM" defvalue="OBW">Full Name</option>
<option value="id" show="OEM" defvalue="OEM">ID</option>
</select>
<select name="SLk1" id="SLk1" size="1">
<option value="OBW">That Begins With</option>
<option value="OOS">That Contains</option>
<option value="OEM">That Equals</option>
</select>
<script type="text/javascript">
var Ori = {
STy1: "STy1",
SLk1Id: "SLk1",
SLk1: [],
Init: function() {
var obj = document.getElementById(this.SLk1Id);
var list = [];
if (obj) {
for (var i = 0; i < obj.options.length; i++) {
list[i] = { text: obj.options[i].text, value: obj.options[i].value };
}
this.SLk1 = list;
A(document.getElementById(this.STy1));
}
},
Show: [],
ShowDefIndex: 0,
SetShow: function() {
var obj = document.getElementById(this.SLk1Id);
if (obj) {
obj.options.length = 0;
for (var i = 0; i < this.Show.length; i++) {
obj.options[i] = new Option(this.Show[i].text, this.Show[i].value);
}
obj.selectedIndex = this.ShowDefIndex;
}
}
};
function A(obj) {
var show = obj.options[obj.selectedIndex].getAttribute("show");
var defvalue = obj.options[obj.selectedIndex].getAttribute("defvalue")||"";
if (show) {
Ori.ShowDefIndex = 0;
show = show.split(",");
Ori.Show.length = 0;
var index = 0;
for (var i = 0; i < show.length; i++) {
for (var j = 0; j < Ori.SLk1.length; j++) {
if (Ori.SLk1[j].value == show[i]) {
if (defvalue == show[i]) {Ori.ShowDefIndex = index; }
Ori.Show[index] = { text: Ori.SLk1[j].text, value: Ori.SLk1[j].value };
index++;
continue;
}
}
}
Ori.SetShow();
}
}
window.onload = function() {
Ori.Init();
};
</script>
</body>
</html>

以前用的时候写了一个,拿来改了下,可以满足楼主的需求
Go 旅城通票 2012-10-31
  • 打赏
  • 举报
回复
<select onchange="A(this)" name="STy1" id="STy1" size="1">
<option value="sn" selected="true">Family/Last Name</option>
<option value="cn">Full Name</option>
<option value="id">ID</option>
</select>
<select name="SLk1" id="SLk1" size="1">
<option value="OBW">That Begins With</option>
<option value="OOS">That Contains</option>
<option value="OEM">That Equals</option></select>
<script type="text/javascript">
var opt = [];
function A(obj) {
var sel = document.getElementById('SLk1');
if (obj.value == 'id') {
if (opt.length == 0) { opt[0] = sel.options[0]; opt[1] = sel.options[1]; } //存储起来,IE不支持option的style="display:none"
//删除1,2项
sel.removeChild(sel.options[0]);
sel.removeChild(sel.options[0]);
}
else if (sel.options.length == 1) { //重新添加1,2项
sel.insertBefore(opt[0],sel.options[0]);
sel.insertBefore(opt[1], sel.options[1]);
sel.selectedIndex = 0;
}
}
</script>
fwacky 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

HTML code
<select onchange="A(this)" name="STy1" id="STy1" size="1">
<option value="sn" selected="true">Family/Last Name</option>
<option value="cn">Full Name</option>
<option value="id">ID</option>……
[/Quote]

简明 ,不错!
AlexMoonshadow 2012-10-31
  • 打赏
  • 举报
回复
function setfillGroupId(val)
{
$.ajax({
type: "post",
url: "/yoblhtjfx/queryArea.action",
data: "parm="+val+"&jsoncallback=?",
dataType: "json",
success: function(json){
var list = json.list;
$("#inUnitAreaId").empty();
$("#inUnitAreaId").prepend("<option value=''>请选择</option>");
for(var i=0;i<list.length;i++)
{
$("#inUnitAreaId").append("<option value='"+list[i][0]+"'>"+list[i][1]+"</option>");
}
}

});


}

给你一个我的,里面的乱码是没改字符集,不影响你,相信你看的懂,只不过我去后台查了一遍数据,你的就简单啦,不用查直接写上去就行了,你说的选中的那个直接加个selected属性就行了,记得引入jquery的js。
hitytt 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

上个帖子里面两处兼容性没有处理:
sel.options[0] = opt[n]; =》 sel.appendChild(opt[n]);
sel.options[i] = opt[i]; =》 sel.appendChild(opt[i]);
爱T 2012-10-31
  • 打赏
  • 举报
回复
不过,经这三个方法,貌似又学到了东西。。。。谢了
爱T 2012-10-31
  • 打赏
  • 举报
回复
都写的比较复杂,完全可以再写简单些
hitytt 2012-10-31
  • 打赏
  • 举报
回复
下面的方法可以保留下拉菜单的任意项,或者选中任意项

<body>
<select name="STy1" id="STy1" size="1">
<option value="sn" selected="true">Family/Last Name</option>
<option value="cn">Full Name</option>
<option value="id">ID</option>
</select>
<select name="SLk1" id="SLk1" size="1">
<option value="OBW">That Begins With</option>
<option value="OOS">That Contains</option>
<option value="OEM">That Equals</option>
</select>

<script type="text/javascript">
(function(){

//存储可变下拉框选项
var opt = [],

//存储可变下拉框对象
sel = document.getElementById('SLk1');

//将可变下拉框中的选项存入数组中
(function(){
var i = 0;
while (opt.length != sel.length){
opt[i] = sel.options[i];
i++;
}
})();

//当选中项发生变化时,调用处理函数
document.getElementById("STy1").onchange = function(){
A(this, 2,1);
};

//obj下拉对象,n为选择"id"后的剩余项下标,selectedN为被选中项下标(下标从0开始)
function A(obj,n,selectedN) {

//选中项为Id是,将所有项删除,添加剩余项
if (obj.value == 'id') {

while(sel.length){
sel.removeChild(sel.options[0]);
}
sel.options[0] = opt[n];

}

//加载所有项
else if(sel.length == 1){
sel.removeChild(sel.options[0]);

(function(){

var i = 0;
while(sel.length != opt.length){
sel.options[i] = opt[i];
i++;
}
})();

sel.options[selectedN].selected = "selected";
}

//选中项
else{
sel.options[selectedN].selected = "selected";
}
}
})();
</script>
</body>

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧