问题描述
拖动一个设置了draggable=true的元素,到另一个监听了mouseup的元素上,无法触发mouseup事件。
这个问题是做项目时遇到的,需求是有一个地图,地图旁边有一个列表,列表中的元素可以拖到地图上生成一个点。
我的做法就是列表的元素设置draggable=true变成可拖动元素,地图监听mouseup事件,拖动列表元素到地图上触发mouseup事件,获取坐标生成点。
问题出现的环境背景及自己尝试过哪些方法
出现bug的操作环境:
操作系统(版本号)/浏览器(版本号)
windows(10)/chrome(66.0.3359.181正式版本64位),
windows(10)/chrome(69.0.3497.100正式版本64位),
macOSX(10.11.6)/chrome(69.0.3497.100正式版本64位)
正常运行的操作环境:
macOSSierra(10.12.4)/chrome(69.0.3497.100正式版本64位)
根据测试情况来看和浏览器版本无关,和操作系统版本有关。
相关代码
以下是根据实际项目模拟了一个小demo,经过测试仍然存在这个问题
<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<style type="text/css">
html,
body,
ul,
li {
margin: 0;
padding: 0;
}
#container {
width: 500px;
height: 500px;
position: relative;
}
#map {
width: inherit;
height: inherit;
background: #d9d9d9;
position: relative;
}
#list {
width: 100px;
height: 100%;
list-style: none;
position: absolute;
top: 0;
right: 0;
background: #fffff1;
}
li:not(:last-child) {
border-bottom: 1px solid #d9d9d9;
}
</style>
<body>
<div id="container">
<div id="map"></div>
<ul id="list">
<li draggable="true">1</li>
<li draggable="true">2</li>
<li draggable="true">3</li>
<li draggable="true">4</li>
</ul>
</div>
</body>
<script type="text/javascript">
document.getElementById('map').addEventListener('mouseup', function(e) {
alert('map mouseup')
}, false)
</script>
</html>
你期待的结果是什么?实际看到的错误信息又是什么?
运行上面的代码,拖动右边列表中的1234到灰色的div上,希望弹出‘map mouseup'的弹窗。
如果说是js的兼容问题,和操作系统应该没什么关系啊?是在不知道为何会出现这种问题,还望高人解答
var container = document.getElementById('container'),