当鼠标移过该索引的选项时,如何设置要选择的多选对象的索引。例如,在下一个html
代码中,当鼠标移过option 1
时,它将被选中。我想在javascript
中完成所有操作而不编辑html
代码。
<select size="6" multiple="multiple">
<option value="1">option 1</option>
<option value="2">option 2</option>
<option value="3">option 3</option>
<option value="4">option 4</option>
<option value="5">option 5</option>
<option value="6">option 6</option>
</select>
答案 0 :(得分:2)
你可以使用jQuery:
$("option").mouseover(function(){
$(this).prop("selected",true);
});
答案 1 :(得分:2)
如果你想给select元素一个id为“mySelect”
<select size="6" multiple="multiple" id ="mySelect">
...
</select>
使用普通的javascript,它将实现如下:
<script type = "text/javascript">
var element = document.getElementById("mySelect");
var options = element.options;
for(var i = 0; i<options.length; i++){
options.item(i).onmouseover = function(e){
e.target.parentNode.selectedIndex = e.target.value-1;
};
}
</script>
答案 2 :(得分:2)
发生的事情是,资源管理器不会为选项标记触发任何事件,也不允许我们获取其坐标或尺寸,所以我认为唯一要做的就是欺骗浏览器:
代码:
function ieElementFromPoint( e )
{
var select = document.getElementById( "mySelect" );
var options = select.childNodes;
var d = document.createElement( "DIV" );
d.style.position = "absolute";
d.style.visibility = "hidden";
d.style.height = options[ 1 ].currentStyle.fontSize;
document.body.appendChild( d );
select.selectedIndex = ( Math.round( ( ( e.clientY + document.body.scrollTop ) - select.offsetTop ) / d.offsetHeight ) );
}
对于其他浏览器,处理更简单:
var old = null;
function select( e )
{
if ( document.all )
{
ieElementFromPoint( e );
}
else
{
var option = e.target;
if ( option.tagName == "OPTION" )
{
if ( old != null )
{
old.selected = false;
}
old = option;
option.selected = true;
}
}
}
不要忘记给[select]正确的id(id =“mySelect”)&amp;在[select]上添加onmousemove =“select(event)”。 这适用于我:Chrome,FireFox(3.6),Explorer 8,Explorer 6(模拟),Opera和Safari浏览器。
记得在我们完成它时从文档中删除测试DIV,否则DOM中会有一堆未使用的DIV,所以在ieElementFromPoint()的末尾添加:
document.body.removeChild(d);
希望得到这个帮助。