关于javaScript实现select下拉框自动展开

5 篇文章 0 订阅
4 篇文章 0 订阅

我本来的目的:是想实现鼠标移动到select下拉框上,下拉框自动展开。
原先思路:使用onmouseover()鼠标事件调用一个openSelect()函数,函数中调用onclick()方法,以为就可以了(代码如下),我想得太简单了。

<head>
<script type="text/javascript">
    <!--
        function openSelect(obj){
            var element=document.getElementById("student");
            element.onclick();
        }   
    -->
</script>
</head>
<body>
    <input type="text" value="选择用户:" />
    <select id="student" onmouseover="openSelect(this);">
        <option value="--请选择--">--请选择--</option>
        <option value="123">123</option>
        <option value="456">456</option>
        <option value="789">789</option>
    </select>
</body>

我在网上进行了一下的搜索:
1. javascript鼠标移动到select下拉框自动展开
2. javasctipt鼠标悬停select自动展开
3. ………..等一系列,
结果都没有我想要的结果,除了鼠标的一些事件mouseover等没有我想要的结果。有人说可以用div模拟一个下拉框,但那不是我想要的我想要的是鼠标移动到上面可以自动展开;也有人说select没有自动展开属性,然后我去W3Cw3cschool地址找了select有哪些属性如下图:
这里写图片描述
瞬间明白了,原来我以为我调用element.onclick();方法就是点击了下拉列表,这是大错特错!!!!!!
后来我又在百度找我想要的结果,研究了半天,最终让我找到一个东西,可以让我实现我想要的结果(高手还是有的,让我瞬间膜拜!),最终代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html>
<head>
<title>事件编程</title>
<script type="text/javascript">
    <!--
        function openSelect(obj){
            var element=document.getElementById("student");
            element.onclick = demo();
            //document.getElementById("student").onclick();
        }

        function demo(){
            student.focus();
            var WshShell = new ActiveXObject("Wscript.Shell");
            try {
                WshShell.SendKeys("%{DOWN}");
            } catch(e){}         
            WshShell.Quit;
        }
    -->
</script>
</head>
<body>
<center>
    <input type="text" value="选择用户:" />
    <select id="student" onmouseover="openSelect(this);">
        <option value="--请选择--">--请选择--</option>
        <option value="123">123</option>
        <option value="456">456</option>
        <option value="789">789</option>
    </select>
</center>
</body>
</html>

解决问题的核心代码是以下这个函数:

function demo(){
            student.focus();
            var WshShell = new ActiveXObject("Wscript.Shell");
            try {
                WshShell.SendKeys("%{DOWN}");
            } catch(e){}         
            WshShell.Quit;
        }

当然这个函数我不懂,高手说“下面代码好像只能在IE下出效果”,我试了一下的确如此而且还会有一下问题(大概说的就是什么安全性问题,我没有仔细研究过):
这里写图片描述
还有:
这里写图片描述

所以根据以上我总结一下:虽然上面提到的解决方案可以实现鼠标移动到select下拉框自动展开功能,但是存在一些问题,比如安全性问题、浏览器兼容性问题等,也就是说我觉得可能在实际开发情况下用它可能不太合适,很多解决方法是用div模拟一个select来实现一样的效果。虽然研究了一个上午,但是还是学到东西了,中间都想放弃不管它了,但是大脑里面一直觉得肯定有能够实现的,所以一直各种查资料,就当纪念一下说服自己吧O(∩_∩)O哈哈~,希望我这小小的学习能给一些后来的朋友一些帮助,如果看到我这篇文章的人知道有更好的解决思路希望你能分享给我,共同学习共同进步。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值