2009-12-30 143 views
4

我有一個可拖動的ul,並且在拖動過程中存在錨點,我想在拖動過程中停用這些錨點,以便一旦draggable.stop ()事件觸發器。帶有可點擊對象的jQuery可拖動列表 - 防止點擊拖動

<ul class="draggable-list"> 
    <li class="list-item"><a href="#">clickable child</a></li> 
    <li class="list-item"><a href="#">clickable child</a></li> 
    ... 
</ul> 

這是一個類似的情況,以這樣的: Preventing click event with jQuery drag and drop

但我可拖動的項目是不是我點擊的項目,我可拖動的項目包含我點擊的項目。

我試着從上面的鏈接代碼,但因爲它引用拖動對象,它不會阻止點擊正確:

$("ul.draggable-list").draggable({ 
    start: function(event, ui) { 
     ui.helper.bind("click.prevent", 
      function(event) { event.preventDefault(); }); 
    }, 
    stop: function(event, ui) { 
     setTimeout(function(){ui.helper.unbind("click.prevent");}, 300); 
    } 
}) 

我想這一點,直接指向的元素我要禁用,但是這必須在發起第一拖曳嘗試點擊,然後阻止所有點擊(拖動或沒有)的影響算賬:

$("ul.draggable-list").draggable({ 
    start: function() { 
     $(".list-item a").bind("click.prevent", 
      function(event) { event.preventDefault(); }); 
    }, 
    stop: function() { 
     setTimeout(function(){$(".list-item a").unbind("click.prevent");}, 300); 
    } 
}) 

我不確定如何改變ui.helper綁定,這樣它就是b引入可點擊的子元素而不是可拖動的父元素。

回答

4

基於這裏的例子:http://www.west-wind.com/Weblog/posts/762598.aspx

我得到它的工作正是如此:

start: function(e) { 
    $(".list-item a").unbind("click"); 
}, 
stop: function(e) { 
    setTimeout(function() { 
     $(".list-item a").click(function(){...}); 
    }, 300); 
}