2012-04-18 3 views
1

Итак, у меня есть проблема, когда я хотел бы иметь возможность переключать поведение сортируемого плагина, когда пользователь нажимает кнопку. IE, имеют режим сортировки и режим просмотра. Я попытался сделать что-то вроде этого:Уничтожение jQuery Sortable/Droppable

function enterEdit(){ 
    $('#someDiv').sortable(); 
} 

function enterView() { 
    $('#someDiv').sortable('destroy'); 
} 

$('#editToggle').on('click', '.toggle-button', function(e){ 
     var $target = $(e.target); 
     if(!$target.hasClass('active')) { 
      if($target[0].id == 'edit'){ 
       enterEdit();      
      } else { 
       enterView(); 
      } 
      $('#editToggle').children().removeClass('active'); 
      $target.addClass('active'); 
     } 
    }); 

Это то, что происходит. Он работает, когда я его сначала инициализирую, а затем и разрушение. Проблема в том, что когда я снова нажимаю кнопку «Изменить», сортируемая не повторно инициализирует. Кто-нибудь когда-либо пробовал это раньше или имел лучшее решение? Благодаря!

ответ

2

если вы даете каждый элемент, который должен быть сортируется конкретный класс, а затем инициализирует с $('#someDiv').sortable({items: li.yourClass});

Тогда вы можете просто добавлять и удалять этот класс на мыши и элементы будут исключены или включены снова.

+0

Ах, позвольте мне сделать это. – gabaum10

+0

Хорошо, это работает для сортировки, но теперь мне нужно сделать то же самое для перетаскиваемого. Я попробовал добавить параметр «items», но это не имело такого же эффекта, как сортировка. – gabaum10

+0

Это сделало трюк. Я добавил класс grabbable в указанный мной дескриптор и установил его как класс, который вы переключаете. Благодаря! – gabaum10

0

У вас есть правильная идея, но я немного запутался, почему существует двойная проверка на «активное», а затем на «id». Вы также должны использовать $ (this), а не весь материал e.target.

В любом случае, выезд this fiddle. Он очищает код за то, что вы делаете, и я думаю, что он делает то, что вы хотите.