javascript - 拖动时 jQuery mouseleave 未正确触发

标签 javascript jquery jquery-ui-sortable mouseleave

我有一个可排序列表,其中的 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/

相关文章:

javascript - jquery 在函数 ajax 函数中存在全局变量问题

javascript - 拖动时自动滚动

javascript - CodeIgniter Gmaps 获取标记对象经纬度

javascript - 如何在激活提交按钮之前使用 javascript 正则表达式来匹配字符串

javascript - 如何在结果中使用过滤器创建高级输入

javascript - 为什么我收到此错误 : Uncaught TypeError: this. createLink is not a function at new Link at <anonymous>1 :9?

jquery - 使用结尾 slider 更改图像

javascript - 工厂中的 AngularJS $http 请求

jquery - 拖动有序列表项时,后续项的编号总是增加 1

jQuery UI sortable 的占位符将元素推到其下方