【发布时间】:2014-07-25 17:43:06
【问题描述】:
我试图在使用 jQuery-UI 的 draggable 小部件连接它之后立即在 div 上触发 drag 事件。我有一些代码在被拖动时会消失,我还想在页面加载后立即运行此代码一次。我有时会在其他 jQuery 处理程序上使用这样的习语:
$('.foo').on('bar', function() {
console.debug('bar!');
}).trigger('bar');
这似乎不适用于draggable。这是我的代码:
var draggable = $('[draggable]').draggable({
drag: function(event, ui) {
//do some stuff
console.debug(event);
}
}).trigger('drag');
drag 处理程序在我拖动项目时被调用,而不是在页面加载时调用。
可能相关的信息:
-
当我拖动项目时,控制台中显示的事件如下所示:
jQuery.Event { type: "drag", target: div#myElementId.ui-draggable, currentTarget: document, delegateTarget: document, data: null, //lots of other properties } -
我尝试了各种调整,但没有任何效果:
- 使用
jQuery.Event构造函数并手动设置上述属性 - 使用
document.getElementById指定我想要的确切元素 - 触发
mousedown或mousedown.draggable而不是drag(这是基于我找到的一些解决方法代码)
- 使用
是的,我意识到我可以单独定义处理程序。我想这样做的部分原因是为了访问
ui参数,这为我提供了一种获取元素位置和偏移量的简单方法。我可以通过其他方式找到它们,但这很烦人。我也很好奇为什么这不起作用。在 Google 和 SO 上的搜索没有找到任何解决方案,只有与我不相关的解决方法,以及对同一问题的其他投诉。 Jörn Zaefferer from the jQUI team recommended the jQuery.simulate plugin 作为一种解决方法,所以它可能是不可能的。他们不会使其与其他 jQuery 事件保持一致,这似乎很奇怪。
【问题讨论】:
-
贾斯汀,我也想做同样的事情,你明白了吗?谢谢
-
@dav - 不。插件似乎不支持。您可能必须按照您在答案中的建议使用 jquery.simulate,或者自定义插件代码。
-
是的,我评论过,但过了一段时间才发现那个插件))
标签: javascript jquery jquery-ui drag-and-drop