8

正しく動作しない mouseleave イベント リスナーを含む並べ替え可能なリストがあります。

マウスを並べ替え可能なリストの内外に移動すると、mouseleave が正しく起動します。

sortable の子の 1 つを最初にクリック アンド ドラッグすると、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");
            }
    });
4

1 に答える 1

5

要素が並べ替え可能な領域を視覚的に離れたときに、イベントをキャプチャしようとしていると仮定します。お気づきのように、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
    }
});
于 2011-07-22T05:17:39.573 に答える