刚才测试在ff下使用preventDefault和stopPropagation都没办法阻止事件的发生,怎么搞不知道了。。不过改了一个变通的方法,就是还原原来的选项,有点跳动<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title> New Document </title>
<meta name="Generator" content="EditPlus">
<script language="JavaScript">
<!--
    var selIndex=-1;
    var isIE = (document.all) ? true : false;
    window.onload=function(){
      var osel= document.getElementById('osel')
    
      osel.onkeydown = function(e){
        e = e || window.event;
        if(e.keyCode == 38 || e.keyCode == 40) isIE?e.returnValue = false:selIndex=this.selectedIndex;
      }
      if(!isIE)osel.onkeyup=function(e){
        e = e || window.event;
        if((e.keyCode == 38 || e.keyCode == 40)&&selIndex!=-1){
          this.selectedIndex=selIndex;
          selIndex=-1;
        }
      }
    }
//-->
</script>
</head><body>
<select id="osel" size="5" style="width:300px;height:200px">
<option value="0">中国</option>
<option value="1">美国</option>
<option value="2">英国</option><option value="3">德国</option>
</select>
</body>
</html>

解决方案 »

  1.   

    showbo兄,还是你不错,看才你一变通我想了下,呵呵 这样好像更好些
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title> New Document </title>
    <meta name="Generator" content="EditPlus">
    <script language="JavaScript">
    <!--
    var isIE = (document.all) ? true : false;
    document.onkeydown = function(e){
    e = e || window.event;
    if(e.keyCode == 38 || e.keyCode == 40){
    if(isIE){
    e.returnValue = false;
    }else{
    //e.preventDefault();
    document.getElementById("osel").blur(); // 让其失去焦点
    }
    }
    }
    //-->
    </script>
    </head><body>
    <select id="osel" size="5" style="width:300px;height:200px">
    <option value="0">中国</option>
    <option value="1">美国</option>
    <option value="2">英国</option>
    <option value="3">德国</option></select>
    </body>
    </html>
      

  2.   

    恩 也不知道这是不是火狐的bug,但用失去焦点效果挺不错,而且选项还是高亮的,这样基本就达到要求了!
      

  3.   

    还真有些麻烦,总算找了个还将就的方案,但仅在ie和ff下还可以,safari系列下会出现选择项丢失
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title> New Document </title>
    <meta name="Generator" content="EditPlus">
    <script language="JavaScript">
    <!--
    window.onload=function(){
    var oSel=document.getElementById("osel");
    osel.onkeydown=function(e){
    oSel.disabled=true;
    window.setTimeout(function(){
    oSel.disabled=false;
    },1);
    }
    }
    //-->
    </script>
    </head><body>
    <select id="osel" size="5" style="width:300px;height:200px">
    <option value="0">中国</option>
    <option value="1">美国</option>
    <option value="2">英国</option>
    <option value="3">德国</option>
    </select>
    </body>
    </html>
      

  4.   

    一开始也用了showbo的用法但跳得实在烦人,还实验了动态添加一个选项然后再删除,可是效果都不理想