我有一个DOM元素,它内部的元素上有YUI事件侦听器。我试图让DOM元素继续在页面的不同部分,但是一旦我这样做,我似乎失去了在YUI中设置的事件。有没有人知道解决这个问题的方法?
答案 0 :(得分:-1)
我面临着同样的问题。我在同一个应用程序中同时拥有YUI和jQuery,因为它是最初使用YUI构建的以前存在的应用程序,我正在尝试使用jQuery来实现使用jQuery更容易实现的功能。
正如我所经历的,你不应该只是通过移动元素来丢失YUI事件:
jQuery("#element1").before(jQuery("#element2"));
另一方面,如果您尝试克隆和交换元素even using the clone function with arguments for cloning events as well,则会出现问题:
var copy_to = $(to).clone(true);
var copy_from = $(this).clone(true);
$(to).replaceWith(copy_from);
$(this).replaceWith(copy_to);
根据这一点,我会说CLONE元素不可能保留使用YUI绑定的事件,但是可以移动它们。
修改强> 这就是我如何移动和交换两个绑定了YUI事件的DOM元素:
function makeElementAsDragAndDrop(elem) {
$(elem).draggable({
//snap : '#droppable',
snapMode : 'outer',
revert : "invalid",
helper: function(event) { // This is a fix as helper: "original" doesn't work well
return $(this).clone().width($(this).width());
},
zIndex : 100,
handle: ".title"
});
$(elem).droppable({
//activeClass : "ui-state-hover",
//hoverClass : "ui-state-active",
drop : function(event, ui) {
var sourcePlaceholder = $( "<div/>",
{
id: "sourcePlaceholder"
}).insertBefore(ui.draggable);
var targetPlaceholder = $( "<div/>",
{
id: "targetPlaceholder"
}).insertBefore(this);
$(ui.draggable).insertBefore(targetPlaceholder);
$(this).insertBefore(sourcePlaceholder);
sourcePlaceholder.remove();
targetPlaceholder.remove();
},
tolerance : "pointer"
});
}
如您所见,上面的代码是我使用jQuery编写的DIVs拖放实现的一部分。
希望它有所帮助。
PS:如果有人知道如何克隆保留使用YUI绑定的事件的元素,请告诉我们!