确定jQuery UI Dragable是否已初始化
是否有一种测试方法来确定确定jQuery UI Dragable是否已初始化,jquery,jquery-ui,jquery-ui-draggable,Jquery,Jquery Ui,Jquery Ui Draggable,是否有一种测试方法来确定jQuery UI Dragable类是否已初始化 我有一系列“draggable1”类的div 由于超出本问题范围的原因,我不想预先初始化该类,而是需要在第一次选择一个div时初始化该类,这是在单击事件处理程序中完成的。然后,我假设我不想每次选择另一个div时都重新初始化该类。因此,我需要确定是否已经单击了其中一个div,并且不需要初始化draggable 还是我看得不对?我是否应该在每次选择另一个div时重新初始化draggable类?假设您使用的是jQuery UI
jQuery UI Dragable
类是否已初始化
我有一系列“draggable1”类的div
由于超出本问题范围的原因,我不想预先初始化该类,而是需要在第一次选择一个div时初始化该类,这是在单击事件处理程序中完成的。然后,我假设我不想每次选择另一个div时都重新初始化该类。因此,我需要确定是否已经单击了其中一个div,并且不需要初始化draggable
还是我看得不对?我是否应该在每次选择另一个div时重新初始化draggable类?假设您使用的是jQuery UI 1.9+(如果不是,请指定您的版本),您可以检索draggable div数据,以检查draggable是否已使用以下方法初始化:
jQuery('.draggable1').data('ui-draggable');
单击处理程序函数如下所示:
$('.draggable1').click(function() {
var $div = $(this);
if(!$div.data('ui-draggable'))
$div.draggable();
});
在本书中看到它的实际作用
说明:jquery UI可拖动小部件基于和,如文档“实例”部分所述:
小部件的实例使用jQuery.data()存储,小部件的全名作为键
您还可以使用选择器检查div元素是否已经绑定了可拖动的小部件:
$div.is(':data(ui-draggable)');
不需要这么复杂 只需像这样检查使用:
var isDraggable = $(elem).hasClass("ui-draggable");
if (isDraggable) {
//do stuff
}
所有的
draggable
元素都得到了ui draggable
类。不用说,我已经厌倦了四处寻找一个好的示例或插件来实现多选draggable设计,所以我决定开发自己的。这正是我需要做的。非常感谢。有一点让人困惑——我本来希望在初始化一个div之后看到所有div都被初始化,因为它们是同一个类的一部分。我注意到,如果预先初始化该类,那么每个div在拖动时都会获得一个额外的ui可拖动类。我想我把分配给div的类与实际实例化的draggable小部件混淆了。如果使用$('.draggable1').draggable()
,所有css类为'draggable1'的div将立即初始化(draggable小部件应用于选择器匹配的每个元素)。而我编写的代码使用css类“draggable1”将click处理程序函数绑定到每个元素。单击一个div后,$div.draggable()将仅此div设置为可拖动代码>。如果您想在单击一个div时初始化所有这些函数,只需替换$div.draggable()
by$('.draggable1')。draggable()
我编辑了JSFIDLE以反映更改,请告诉我它是否符合您的需要。稍微澄清一下:css类确实不是小部件实例。您的div具有css类“.draggable1”,用于选择将应用draggable小部件的元素。当小部件应用于一个div时,将创建一个小部件实例,并使用jQuery.data(…)
将其附加到div元素。应用小部件时,css类“ui Dragable”也会自动添加到div中。css类“ui Dragable Draging”也会在拖动时添加到您的div中,并在拖动停止时删除。例如,如果我解释我最初问题的原因,会有所帮助。我们有一个相当复杂的页面,里面充满了可拖动和可拖放的内容。它最初包含对其JavaScript文件的引用。当发生拖放时,页面将刷新,从而重新加载JavaScript文件。我们将其更改为一个完全是AJAX的页面,在添加multi-select功能时不刷新页面或JavaScript文件。在一段时间内,一切都运转良好,但最终情况开始变得不稳定。