2011-02-01 67 views
1

我有像這樣的列表:jQuery UI的可排序的子觸發

<ol id="page_items">   
    <li> 
     <label for="page_body_1">Content Area 1</label> 
     <textarea name="page_body_1" class="page_content_area" rows="10"></textarea> 
    </li>   
    <li> 
     <label for="page_body_2">Content Area 2</label> 
     <textarea name="page_body_2" class="page_content_area" rows="10"></textarea> 
    </li>  
</ol> 

頁面加載時,#page_items變成TinyMCE的編輯器。我想要的是定義li元素是否被排序爲<label>而不是其他子元素li的元素。所以開始排序的唯一元素就是標籤。

這裏是我的jQuery:

$(document).ready(function(){ 
    $("#page_items").sortable({ 
     activate: function(event, ui) { 
      var EditorID = ui.item.find('textarea').attr('id'); 
      if (EditorID){ 
       tinyMCE.execCommand("mceRemoveControl", false, EditorID); 
       $('#'+EditorID).hide(); 
      } 
     }, 
     stop: function(event, ui) { 
      var EditorID = ui.item.find('textarea').attr('id'); 
      if (EditorID){ 
        $('#'+EditorID).show(); 
       tinyMCE.execCommand("mceAddControl", false, EditorID); 
       delete EditorID; 
      } 
     } 
    }); 
}); 

如果你想知道,我禁用TinyMCE的,因爲在Firefox中,移動的iFrame周圍的DOM清除它的內容和不允許的焦點回來就可以了。

如果單擊的元素不是標籤,是否有取消排序的方法?

如果有人有任何代碼清理建議,他們也歡迎!

謝謝。

回答

2

事實證明,這是一個可以排序的選項,我以前沒有看到(我看了......哦,我看了)。 handle選項是我所需要的。這會初始化一個可指定的句柄選項。

簡單...

$(document).ready(function(){ 
    $("#page_items").sortable({ 
     handle: 'label' 
    }); 
});