2013-10-10 29 views
-1

我有一个与我的UI元素(图标)与draggable()函数的持有人的问题。该图标应该附加点击一次。我的代码的问题是,当我点击图标时,它会再次运行代码并追加下一个图标。追加UI元素只有一次,并避免事件传播

如何在这种情况下避免事件传播。是否有更好的方法在这里使用one()函数。 我的代码:

HTML结构:

<div class="editor"> 
    <h1>Title</h2> 
    <p>paragraph</p> 
    <img src=""> 
</div> 

<div class="editor"> 
    <h1>Title</h2> 
    <p>paragraph</p> 
    <img src=""> 
</div> 


<div class="editor"> 
    <h1>Title</h2> 
    <p>paragraph</p> 
    <img src=""> 
</div> 

JS:

$(document).on('click', '.editor *', function(event) {  
     $(this).resizable(); 
     $(this).draggable({ handle: ".editor-move" }); 
     $(this).one($(this).append("<i class='icon-move editor-move'></i>")); 
     return false; 
    }); 

回答

1

首先,你需要确保的当前目标该事件不是图标移动e lement,如果是的话退出。

if ($(event.target).hasClass("icon-move")) 
    return false; 

其次,检查图标是否已被添加到随后的点击,以避免为同一元素添加多个图标。

if($(".icon-move",this).length==0) 
    $(this).append("<i class='icon-move editor-move'></i>"); 

JSFiddle

0
$(document).on('click', '.editor *', function(event) { 
     event.stopPropagation();  
     $(this).resizable(); 
     $(this).draggable({ handle: ".editor-move" }); 
     $(this).one($(this).append("<i class='icon-move editor-move'></i>")); 
     return false; 
    }); 
+0

不幸的是这是行不通的,它也创造错误:遗漏的类型错误:对象函数对象(){[本地代码]}有没有方法“推” – lipenco

0

尝试

$(document).one('click', '.editor *', function(event) {  
    $(this).resizable(); 
    $(this).draggable({ handle: ".editor-move" }); 
    $(this).append("<i class='icon-move editor-move'></i>"); 
    return false; 
}); 
+0

此代码只会工作对于第一个编辑器,在函数运行一次之后,我们不能在下一个编辑器中重复此操作。 – lipenco

+0

@lipenco元素是否是动态创建的 –

+0

@lipenco是否在'editor'内的元素是可拖动和可独立调整大小 –