Jquery 如何在可拖动对象上使用 .live

Posted

技术标签:

【中文标题】Jquery 如何在可拖动对象上使用 .live【英文标题】:Jquery How to use .live on draggable 【发布时间】:2013-04-01 07:15:17 【问题描述】:

我正在使用 jquery ui 中的可拖动方法。如何在可拖动对象上应用 live()。

$("#image").draggable( containment: [10, 150, 0, 0], scroll: false);

我试过的是这个

$("#image").live("draggable", function () 
.draggable( containment: [10, 150, 0, 0], scroll: false);

但这不起作用。

谢谢

【问题讨论】:

你的意思是.on().live() has been removed as of jQuery 1.9 查看此示例讨论***.com/a/3349395/1193035 仅供参考,.live() 已弃用。改为查看 .on() (api.jquery.com/on) 如果您尝试将插件应用于动态元素,它将无法正常工作。必须有一个事件。 如果您自己添加元素,则应在添加后立即将其转换为可拖动的。 【参考方案1】:

首先作为仅供参考,live 已被弃用,您应该使用 .on() 作为上述状态的 cmets。

其次,您将无法在任一场景中执行您需要执行的操作,因为这些事件未包含在 on() 中。因此,我处理它的方法是在函数中执行您的事件附件:

function doDraggable() 
    $(".draggable").draggable( containment: [0, finalHeight, 0, 0], scroll: false);

然后在文档准备好以及 ajax 完成时初始化它:

$(document).ready(function () 
    doDraggable();
);
$(document).ajaxComplete(function () 
    doDraggable();
);

您可以比使用 ajaxComplete 事件的文档选择器更具体,这样它就不会为 每个 ajax 事件触发,但你明白我的意思...

【讨论】:

如果他在没有 AJAX 的情况下添加元素怎么办? 那么 document.ready 应该覆盖它。或者你的意思是在 jQuery 之外执行 ajax?如果是这样,他将需要将回调附加到那些特定的 ajax 调用以重新初始化附件。 我的意思是向 DOM 添加元素以响应用户事件,例如单击按钮,只需通过 $('body').append('div') 或类似的方式。 我明白了。只需在更新 DOM 后调用该函数就可以了,对吧? 如果这令人困惑,我建议您回到 jQuery 的基础知识,因为这里介绍的概念相对简单。网上有成千上万的教程。您可能希望从这里开始:docs.jquery.com/Tutorials 专注于事件附件和 DOM 操作。这也很有用:jquery4u.com/jquery-functions/on-vs-live-review

以上是关于Jquery 如何在可拖动对象上使用 .live的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 内部的问题,fn.bind/fn.apply 在可拖动对象上(试图做更好的异常处理)

jQuery 可拖动和可拖放,在可拖动 ul 上滚动

在可拖动的 JQuery UI 上手动触发“堆栈”选项

在可拖动元素上模拟 3 像素拖动

使用 jQuery UI 使可拖动元素在可放置中可排序

在可拖动和可调整大小的 Jquery div 中删除