Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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 Dragable是否已初始化_Jquery_Jquery Ui_Jquery Ui Draggable - Fatal编程技术网

确定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文件。在一段时间内,一切都运转良好,但最终情况开始变得不稳定。