Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.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
javascript-jqueryui:calling.droppable on non-existing div donds';行不通_Javascript_Jquery_Jquery Ui - Fatal编程技术网

javascript-jqueryui:calling.droppable on non-existing div donds';行不通

javascript-jqueryui:calling.droppable on non-existing div donds';行不通,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,我有这样一个代码: $('div.widgetDroppable').droppable({ accept: 'li.widget', drop: function(event, ui) { self.dropEventHandler(event, ui, $(this)); } }); 我允许用户以友好的方式(通过类似$('#page')的代码添加许多widgetDroppable div。append(一些HTML代码)):问题是(实际上这不是一个真正的问题,但我不

我有这样一个代码:

$('div.widgetDroppable').droppable({
    accept: 'li.widget',
 drop: function(event, ui) { 
     self.dropEventHandler(event, ui, $(this));
 }
});
我允许用户以友好的方式(通过类似
$('#page')的代码添加许多widgetDroppable div。append(一些HTML代码)
):问题是(实际上这不是一个真正的问题,但我不喜欢这种方式)如果我在创建任何widgetDroppable div之前放置上一个代码,它将无法工作,它似乎没有将“可放下”的东西绑定到div上,因为目前没有一个div。我必须将代码放入一个方法中,该方法在用户添加div时随时调用,但我希望避免这种情况。这可能吗


另外,我不明白这是否是jQuery中的默认行为,因为我注意到,对于其他类型的div,代码显然在工作,即使它们尚未创建。

您可能可以使用

您的代码如下所示:

$('div.widgetDroppable').livequery(function(){
    $(this).droppable({
        accept: 'li.widget',
        drop: function(event, ui) { 
            self.dropEventHandler(event, ui, $(this));
        }
    });
});

您可能可以通过使用解决此问题

您的代码如下所示:

$('div.widgetDroppable').livequery(function(){
    $(this).droppable({
        accept: 'li.widget',
        drop: function(event, ui) { 
            self.dropEventHandler(event, ui, $(this));
        }
    });
});

jQuery中已经有一个.live()函数。这与livequery插件有什么不同吗?另外,我知道这与将事件绑定到尚未创建的DOM元素有关,但是.droppable()不是一个事件,因此我无论如何都不能使用它。如果我错了,请纠正我我认为live()当前不支持仅将回调作为参数,而不绑定jQuery支持的事件之一。在上面的示例中,每次创建类为“widgetDroppable”的div时,都会在这个新创建的元素的范围内执行回调。这也应该回答你关于事件的第二个问题。使用“livequery”,您不需要绑定事件。在添加示例代码之前,我已经进行了注释。您是对的,live()目前不支持不绑定事件的回调,所以这似乎是我唯一的解决方案。谢谢,我并没有用你的答案来解决问题,但我会接受的,因为正是由于这个答案,我才想到了这个问题。如果有人对我的答案感兴趣,我已经在我的答案的注释中发布了我的解决方案。jQuery中已经有一个.live()函数。这与livequery插件有什么不同吗?另外,我知道这与将事件绑定到尚未创建的DOM元素有关,但是.droppable()不是一个事件,因此我无论如何都不能使用它。如果我错了,请纠正我我认为live()当前不支持仅将回调作为参数,而不绑定jQuery支持的事件之一。在上面的示例中,每次创建类为“widgetDroppable”的div时,都会在这个新创建的元素的范围内执行回调。这也应该回答你关于事件的第二个问题。使用“livequery”,您不需要绑定事件。在添加示例代码之前,我已经进行了注释。您是对的,live()目前不支持不绑定事件的回调,所以这似乎是我唯一的解决方案。谢谢,我并没有用你的答案来解决问题,但我会接受的,因为正是由于这个答案,我才想到了这个问题。如果有人感兴趣,我已经在我的答案的注释中发布了我的解决方案。解决方案:因为.live()不支持将回调作为参数,所以我创建了一个名为“divAdded”的自定义事件,每次创建div.widgetdropable时,都会使用.trigger()触发该事件。然后我使用第一段代码作为对.live('divAdded',callback)的回调,它工作得很好。解决方案:因为.live()不支持仅作为参数的回调,所以我创建了一个名为'divAdded'的自定义事件,每次创建div.widgetdropable时都使用.trigger()触发该事件。然后我使用第一段代码作为对.live的回调('divAdded',callback),它工作得很好。