我有一个带有mouseleave事件监听器的可排序列表,其行为不正确.
如果我将鼠标移入和移出可排序列表,则mouseleave会正确触发.
如果我首先单击并拖动其中一个可排序的子项,则mouseleave会错误地触发 – 偶尔或根本不会触发.
有任何想法吗?
谢谢.
更新:这也适用于mouseout事件.
<style> #sortable { list-style-type: none; margin: 0; padding: 0; float: left; margin-right: 10px; background-color: #CCC; } #sortable li { margin: 0 5px 5px 5px; padding: 5px; font-size: 1.2em; width: 120px; } </style> <script> $(function(){ $("#sortable").sortable().disableSelection(); $("#sortable").mouseleave(function(){ console.log("mouseleave"); }); }); </script> <ul id="sortable"> <li class="ui-state-default">Item 1</li> <li class="ui-state-default">Item 2</li> <li class="ui-state-default">Item 3</li> </ul>
更新
我已经使用以下内容来检测孩子被完全拖出可排序的时间:
$("#sortable li").mousemove(function() { if ($(this).offset().left > $(this).parent().outerWidth() + $(this).parent().offset().left || $(this).offset().top > $(this).parent().outerHeight() + $(this).parent().offset().top || $(this).offset().left + $(this).outerWidth() < $(this).parent().offset().left || $(this).offset().top + $(this).outerHeight() < $(this).parent().offset().top ){ console.log("child is outside parent"); } });
解决方法
我将做一个假设,并说当你的元素在视觉上离开可排序区域时,你正试图捕获事件.正如您所知,mouseleave和mouseout不是最好的方法,因为它们跟踪相对于DOM元素的鼠标移动.由于您拖动这些列表项,因此它们实际上从未离开无序列表,因此您无法获得预期的结果.
这应该对你有用:
$("#sortable").sortable().disableSelection(); $("#sortable li").mousemove(function() { if (parseInt($(this).css("left")) > $("#sortable").width() || parseInt($(this).css("top")) > $("#sortable").height()) { //This is when the element is out of bounds } });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。