确定是否初始化了jQuery UI Draggable

时间:2014-03-18 11:54:10

标签: jquery jquery-ui jquery-ui-draggable

是否有一种测试方法可以确定jQuery UI draggable类是否已初始化?

我有一系列带有“draggable1”类的div。

由于超出了本问题范围的原因,我不想提前初始化类,而是我需要在第一次选择一个div时初始化类,这是我在click事件处理程序中执行的。然后,我假设每次选择另一个div时我都不想继续重新初始化类。所以,我需要确定是否已经点击了其中一个div,并且没有必要初始化draggable。

或者我错误地看着这个?我是否应该在每次选择另一个div时重新初始化可拖动的类?

2 个答案:

答案 0 :(得分:11)

假设您使用的是jQuery UI 1.9+(如果没有,请指定您的版本),您可以检索可拖动的div数据,以检查是否使用以下方式初始化了draggable:

jQuery('.draggable1').data('ui-draggable');

您的点击处理程序功能如下所示:

$('.draggable1').click(function() {
    var $div = $(this);
    if(!$div.data('ui-draggable'))
        $div.draggable();
});

jsFiddle

中查看它的实际效果

解释:jquery UI可拖动窗口小部件基于jQuery UI widget factory,并且如“实例”中所述。文档部分:

  

使用jQuery.data()存储小部件的实例,小部件的全名作为密钥。

你也可以使用:data选择器来检查你的div元素是否已经绑定了一个可拖动的小部件:

$div.is(':data(ui-draggable)');

答案 1 :(得分:2)

它不需要如此复杂......

只需使用jQuery's hasClass进行检查即可:

var isDraggable = $(elem).hasClass("ui-draggable");

if (isDraggable) {
    //do stuff
}

所有draggable元素都会获得ui-draggable类。