我有一个可排序列表,其中的 mouseleave 事件监听器行为不正确。
如果我将鼠标移入和移出可排序列表,mouseleave 会正确触发。
如果我首先单击并拖动 sortable 的其中一个子项,mouseleave 会错误地触发 - 偶尔触发或根本不触发。
有什么想法吗?
谢谢。
更新:鼠标移出事件也会发生这种情况。
<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>
更新 我使用以下方法来检测 child 何时被完全拖出可排序对象:
$("#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
}
});
关于javascript - 拖动时 jQuery mouseleave 未正确触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6785326/