Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JQuery UI启动时可拖动包含_Jquery_Jquery Ui - Fatal编程技术网

JQuery UI启动时可拖动包含

JQuery UI启动时可拖动包含,jquery,jquery-ui,Jquery,Jquery Ui,我有一个draggable,它需要在启动时而不是在初始化时设置它的容器 编辑 原因是draggable是组件的一部分,组件可以存在于多个位置,因此我需要检查(在开始时)它在DOM中的位置,并根据它的位置设置适当的包含 例如,如果元素A中存在Dragable,则将包容设置为元素A。如果元素B中存在实例,则将其设置为元素B 为了进一步澄清,我不希望直接父对象是容器(因为我相信这可以通过向控件传递“parent”来处理),而是一个任意父对象,因此我需要在开始拖动时执行此逻辑 这是可行的,但只有在拖动

我有一个draggable,它需要在启动时而不是在初始化时设置它的容器

编辑 原因是draggable是组件的一部分,组件可以存在于多个位置,因此我需要检查(在开始时)它在DOM中的位置,并根据它的位置设置适当的包含

例如,如果元素A中存在Dragable,则将包容设置为元素A。如果元素B中存在实例,则将其设置为元素B

为了进一步澄清,我不希望直接父对象是容器(因为我相信这可以通过向控件传递“parent”来处理),而是一个任意父对象,因此我需要在开始拖动时执行此逻辑

这是可行的,但只有在拖动元素两次之后。例如,如果你拿起红色的盒子,把它拖到安全壳外面,它会让你。但是如果你把它放在容器里,然后再拖,它就会被正确地控制住。(注意,我使用的是Chrome)

这使我相信,在调用start函数之前,会检查安全壳


有什么方法可以让JQuery UI识别已更改的选项,还是需要手动将可拖动项限制在限制范围内?

我决定跟进我的怀疑,即在调用启动事件之前设置了限制

我在JQuery UI源代码中找到了以下代码:

//Set a containment if given in the options
this._setContainment();

//Trigger event + callbacks
if(this._trigger("start", event) === false) {
    this._clear();
    return false;
}
我只是简单地切换顺序,以便在事件发生后调用
\u setContainment()
函数。这为我解决了这个问题,但我有点担心这可能带来的影响(包括bug/可维护性)


因此,如果有人有更好的想法,我将不胜感激。

我不明白你为什么不只是在做
$(“#dragMe”).draggable({containment:'#container')@j08691我正要回答这个问题。你应该把它作为一个答案。@SpencerMay-我会给Johannes一个机会澄清自己,以防我们遗漏了什么。我说的第一件事是,它需要在开始时设置,而不是在创建时设置。原因是draggable是组件的一部分,并且组件可以存在于多个位置,因此我需要(在开始时)检查它在DOM中的位置,并设置适当的包含。谢谢。到目前为止,我还没有发现任何副作用,这似乎是我找到的唯一体面的解决方案。很高兴能提供帮助,但不幸的是,两年后,这仍然是“唯一体面的解决方案”。
//Set a containment if given in the options
this._setContainment();

//Trigger event + callbacks
if(this._trigger("start", event) === false) {
    this._clear();
    return false;
}