draggableでcontainmentを指定してないのに"parent"(親要素内)になってしまう問題

たとえば、hogeの中にdragがある。

<div id="hoge">
 <div id="drag">contents</div>
</div>

で、

$(".drag").draggable({
 /* 処理 */
});

だけ書いてあるのに、hogeから出れない問題があった。

真っ先に疑ったオプションがコレ系なんだけど、「できない」「no work」で調べると殆んどがこのオプションにたどりつく。しかし、どこにも記述していない。

$(".drag").draggable({
 containment: 'parent',
 /* 処理 */
});


今回の問題はCSSにあったoverflow

#hoge{overflow: hidden;}

CSSを修正すると何が起きるか検証するのが面倒だったので、こんな対策を施した。

$(".drag").draggable({
 start:function(e, ui){
  $(this).parent().css("overflow", "visible");//親から脱出できない対策
  },
 drag: function(e, ui){
  /* 処理 */
  },
 stop: function(e, ui){
  $(this).parent().css("overflow", "hidden");
  },
 revert: true
 }).hover(function (){
  /* 処理 */
 }
});

脱出できない要素のoverflowを調べてみるべし。