2013-09-16 142 views
1

我有一个很大的问题: 我的页面上有很多div容器,我使用jQuery制作的可拖动类“.element”。 现在我可以动态创建类“元素”的div,并且我想让它们可拖动。所以我想:简单的解决方案:我只是打电话jQuery动态调用事件侦听器

$(“。element”)。draggable();

再次。但是:整个监听器被执行了两次,这对我来说是不可接受的,因为它发送了AJAX请求,我不希望它们被发送两次。

所以我开始让函数只在新创建的元素上调用draggable,我猜这很愚蠢。

所以我的问题:有没有更好的可能性,因为现场() - 方法已过时

请帮我(这是在我看来,一个很大的错误!)!

亲切的问候, 大卫

+0

你可以“上”,而不是使用live – iiro

+0

只需要注意,'on'不一定像'live'一样工作。我发现,要将侦听器附加到动态创建的元素来代替'live',您需要以这种方式使用:$('body')。on('click','#myElement',function(){/ /做东西});。 “body”可以用任何容器元素替换,具体取决于你希望获得的粒度。要定位一切,您只需使用文档而不是“正文”。 –

回答

0

一个快速的解决办法是使用data-attr作为标志

$(".element:not(data-draggable='1')") 
    .draggable() 
    .attr("data-draggable","1"); 

注:live方法已被弃用,但你可以使用on

2

使用event.stopPropagation()

在event..it将停止事件来触发两次

....

我希望它为你工作...