今天发现一个很奇怪的问题,在用下拉框onclick事件时,如果是默认选项的话,onclick不响应。做了个简单的例子,页面中有一个下拉框,两个复选框。下拉框中有all, a, b三种选择,点击all选中两个复选框,点击a选中复选框a, 点击b选中复选框b。测试时如果一开始只点击下拉框内的a或者b选项,没问题; 点了a(或b)后再点all也没问题。但是如果一开始就点all的话(此时all是默认选项),不响应。或者先点a,然后手动把复选框b勾上,再点a(此时a是默认选项),也不响应。请问是我的code有什么不对的地方吗? >_< 还是有什么其他可以避免这个问题的办法呢?谢谢赐教了。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<script language="JavaScript" type="text/javascript">
function getChange(){
var v = document.getElementById('choice')
var n = document.getElementsByName('all');
for(i=0;i<n.length;i++){
document.getElementsByName('all')[i].checked=false;}
switch(v.value){
case ('all'):
for(i=0;i<n.length;i++)
document.getElementsByName('all')[i].checked=true;
break;
case('a'):
document.getElementById('a').checked=true;
break;
case('b'):
document.getElementById('b').checked=true;
break;
}
}
</script>
</HEAD> <BODY>
<SELECT id="choice" onChange="getChange()">
<OPTION VALUE="all">all</OPTION>
<OPTION VALUE="a">a</OPTION>
<OPTION VALUE="b">b </OPTION>
</SELECT> <br><input type="checkbox" name="all" id="a">a
<br><input type="checkbox" name="all" id="b">b </BODY>
</HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<script language="JavaScript" type="text/javascript">
function getChange(){
var v = document.getElementById('choice')
var n = document.getElementsByName('all');
for(i=0;i<n.length;i++){
document.getElementsByName('all')[i].checked=false;}
switch(v.value){
case ('all'):
for(i=0;i<n.length;i++)
document.getElementsByName('all')[i].checked=true;
break;
case('a'):
document.getElementById('a').checked=true;
break;
case('b'):
document.getElementById('b').checked=true;
break;
}
}
</script>
</HEAD> <BODY>
<SELECT id="choice" onChange="getChange()">
<OPTION VALUE="all">all</OPTION>
<OPTION VALUE="a">a</OPTION>
<OPTION VALUE="b">b </OPTION>
</SELECT> <br><input type="checkbox" name="all" id="a">a
<br><input type="checkbox" name="all" id="b">b </BODY>
</HTML>
楼主可以考虑加上 onblur="getChange()"
onChange当然不会响应 。因为它选项没有发生改变 。
你换成onclick 看看 。
onChange应该是我用的有点问题,就像ls说的那样,如果选择没有变得话,自然也就不会有响应了。可是刚刚试着换成onblur或者onclick也不行。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<script language="JavaScript" type="text/javascript">
function getChange(){
var v = document.getElementById('choice')
var n = document.getElementsByName('all');
for(i=0;i<n.length;i++){
document.getElementsByName('all')[i].checked=false;} switch(v.value){
case ('all'):
for(i=0;i<n.length;i++)
document.getElementsByName('all')[i].checked=true;
break;
case('a'):
document.getElementById('a').checked=true;
break;
case('b'):
document.getElementById('b').checked=true;
break;
default:
}
}
</script>
</HEAD> <BODY>
<SELECT id="choice" onChange="getChange()">
<OPTION VALUE="none">none</OPTION>
<OPTION VALUE="all">all</OPTION>
<OPTION VALUE="a">a</OPTION>
<OPTION VALUE="b">b </OPTION>
</SELECT> <br><input type="checkbox" name="all" id="a" >a
<br><input type="checkbox" name="all" id="b" >b </BODY>
</HTML>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<script language="JavaScript" type="text/javascript">
function getChange(){
var v = document.getElementById('choice')
var n = document.getElementsByName('all');
for(i=0;i<n.length;i++) document.getElementsByName('all')[i].checked=false;
switch(v.value){
case ('all'):
for(i=0;i<n.length;i++)
document.getElementsByName('all')[i].checked=true;
break;
case('a'):
document.getElementById('a').checked=true;
break;
case('b'):
document.getElementById('b').checked=true;
break;
}
}
</script>
</HEAD> <BODY>
<SELECT id="choice" onChange="getChange()">
<OPTION VALUE="none">none</OPTION>
<OPTION VALUE="all">all</OPTION>
<OPTION VALUE="a">a</OPTION>
<OPTION VALUE="b">b </OPTION>
</SELECT> <br><input type="checkbox" name="all" id="a" >a
<br><input type="checkbox" name="all" id="b" >b </BODY>
</HTML>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<script language="JavaScript" type="text/javascript">
function getChange(){
var v = document.getElementById('choice')
var n = document.getElementsByName('all');
for(i=0;i<n.length;i++) document.getElementsByName('all')[i].checked=false;
switch(v.value){
case ('all'):
for(i=0;i<n.length;i++)
document.getElementsByName('all')[i].checked=true;
break;
case('a'):
document.getElementById('a').checked=true;
break;
case('b'):
document.getElementById('b').checked=true;
break;
}
}
</script>
</HEAD> <BODY>
<SELECT id="choice" onChange="getChange()">
<OPTION VALUE="none">none</OPTION>
<OPTION VALUE="all">all</OPTION>
<OPTION VALUE="a">a</OPTION>
<OPTION VALUE="b">b </OPTION>
</SELECT> <br><input type="checkbox" name="all" id="a" >a
<br><input type="checkbox" name="all" id="b" >b </BODY>
</HTML>
恩?switch在for的下面呢,我switch上面的那个for打上了花括号,作用是把当前checkbox的勾去除掉。
恩,没错,你说的这个办法对主贴里的小例子完全管用。可是问题是,其实我在做一个邮箱,这个功能是为了加上去让用户可以方便的选择多个邮件,就像gamil的那样似得。如果把邮件前面的checkbox禁用了就会影响其他的功能了。为难的挠头ing...