【发布时间】:2014-05-21 12:56:02
【问题描述】:
我有一个可拖动对象,它需要在启动时而不是在初始化时设置它的包含。
编辑 原因是可拖动对象是组件的一部分,并且该组件可以存在于多个位置,因此我需要检查(在开始时)它在 DOM 中的位置,并根据它的位置设置适当的容器。
例如,如果元素A中存在draggable,则为元素A设置包含。如果元素B中存在实例,则将其设置为元素B。
为了进一步澄清,我不是在寻找直接父级作为容器(因为我相信这可以通过将“父级”传递给控件来处理),而是一个任意父级,因此我需要这样做开始拖动的逻辑。
I've tried the obvious (jsfiddle)
$('#dragMe').draggable({
start: function (event, ui) {
$(this).draggable('option', "containment", '#container');
},
});
这有效,但只有在您拖动元素两次之后。因此,例如,如果您拿起红色盒子并将其拖到安全壳外,它会让您。但是,如果您将其放入容器中,然后再次拖动它,它将被正确包含。 (注意,我使用的是 Chrome)
这让我相信在调用 start 函数之前检查了包含。
有什么方法可以让 JQuery UI 识别更改的选项,还是需要手动将可拖动对象限制在边界内?
【问题讨论】:
-
我不明白你为什么不只是在做
$('#dragMe').draggable({containment: '#container'});。 jsfiddle.net/j08691/9X7Hd/1 -
@j08691 我正要回答这个问题。你应该把它作为答案。
-
@SpencerMay - 如果我们遗漏了什么,我会给约翰内斯一个澄清自己的机会。
-
我说的第一件事是它需要在启动时设置,而不是在创建时设置。原因是可拖动对象是组件的一部分,并且该组件可以存在于多个位置,因此我需要(在开始时)检查它在 DOM 中存在的位置并设置适当的包含。