我本来的目的:是想实现鼠标移动到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哈哈~,希望我这小小的学习能给一些后来的朋友一些帮助,如果看到我这篇文章的人知道有更好的解决思路希望你能分享给我,共同学习共同进步。
终极解决办法部分兼容:
function open(elem) {//pc端仅兼容UC,苹果...移动端支持安卓IOS微信钉钉.
if (document.createEvent) {
console.log(111);
//elem.focus();
var e = document.createEvent("MouseEvents");
e.initMouseEvent("mousedown", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
elem.dispatchEvent(e);
} else if (elem.fireEvent) {
console.log(222);
elem.fireEvent("onmousedown");
}
}
---------------------
作者:CSDN小松鼠
来源:CSDN
原文:https://blog.csdn.net/sun_song520/article/details/50412157
版权声明:本文为博主原创文章,转载请附上博文链接!