2015-06-16 6 views
2

JQuery класс изменения при сортировке

//JavaScript 
 

 
$(function() { 
 
    $("#sortable1, #sortable2").sortable({ 
 
    connectWith: ".connectedSortable" 
 
    }).disableSelection(); 
 
});
/*CSS*/ 
 

 
#sortable1, #sortable2 { 
 
    border: 1px solid #eee; 
 
    width: 142px; 
 
    min-height: 20px; 
 
    list-style-type: none; 
 
    margin: 0; 
 
    padding: 5px 0 0 0; 
 
    float: left; 
 
    margin-right: 10px; 
 
} 
 
#sortable1 li, #sortable2 li { 
 
    margin: 0 5px 5px 5px; 
 
    padding: 5px; 
 
    font-size: 1.2em; 
 
    width: 120px; 
 
}
<!--My HTML --> 
 

 
<ul id="sortable1" class="connectedSortable"> 
 
    <li class="ui-state-default">Item 1</li> 
 
    <li class="ui-state-default">Item 2</li> 
 
    <li class="ui-state-default">Item 3</li> 
 
</ul> 
 

 
<ul id="sortable2" class="connectedSortable"> 
 
    <li class="ui-state-highlight">Item 1</li> 
 
    <li class="ui-state-highlight">Item 2</li> 
 
    <li class="ui-state-highlight">Item 3</li> 
 
</ul>

Моим вопрос: Когда li элемента перехода от одного к другим ulul в то время li содержат изменения класса.

exa. возьмите li сперва ul для перемещения второй ul в то время li изменение класса ui-state-default до ui-state-highlight.

вы можете редактировать в Js скрипку http://jsfiddle.net/fo51dggo/

+0

Я не думаю, что ваш вопрос очень ясный. – Andrew

ответ

3

Существует способ остановки в сортировке. изменить класс там

Событие остановки запускается при прекращении сортировки.

Try как этот

$(function() { 
    $("#sortable1, #sortable2").sortable({ 
     connectWith: ".connectedSortable", 
     start: function (event, ui) { 
      ui.item.data('parentID', ui.item.parent().attr("id")); 
     }, 
     stop: function (event, ui) { 
      var parentID = ui.item.data('parentID'); 
      if (ui.item.hasClass("ui-state-default")) { 
       if (parentID !== ui.item.parent().attr("id")) { 
        ui.item.removeClass("ui-state-default"); 
        ui.item.addClass("ui-state-highlight"); 
       } 
      } else if (ui.item.hasClass("ui-state-highlight")) { 
       if (parentID !== ui.item.parent().attr("id")) { 
        ui.item.removeClass("ui-state-highlight"); 
        ui.item.addClass("ui-state-default"); 
       } 
      } 
      console.log(ui.item.parent().attr("id")); 
     } 
    }).disableSelection(); 
}); 

Fiddle

+0

Это только работа для перемещения элемента слева направо, но не работа для перемещения элеватора справа налево. см. 'http: // jsfiddle.net/fo51dggo/2 /' –

+0

Я обновил свой ответ –

+0

У меня есть вторая проблема, когда вы перемещаете элемент в один и тот же блок в то время и изменение класса, но это нехорошо, я имею в виду, когда элемент перемещается в тот же блок в то время класс стал не изменяться. –

0

Используйте функцию drop(event, ui), которая выполняется, когда вы уронили Droppable объект. Вы можете использовать:

ui.item.addClass("ui-state-highlight"); 

Внутри drop(event, ui) функция. Дополнительная информация: Droppable - Event Drop.

1

Вы можете использовать stop событие для обработки изменений класса,

start: function (event, ui) { 
     $currParent = ui.item.parent(); 
}, 
stop: function (event, ui) { 
    if(!ui.item.parent().is($currParent)) ui.item.attr('class', ui.item.siblings().attr('class')) 
} 

Fiddle Demo

ui.item - объект jQuery, представляющий текущий перемещенный элемент.


Полный код:

$(function() { 
    var $currParent; 
    $("#sortable1, #sortable2").sortable({ 
     connectWith: ".connectedSortable", 
     start: function (event, ui) { 
      $currParent = ui.item.parent(); 
     }, 
     stop: function (event, ui) { 
      if(!ui.item.parent().is($currParent)) ui.item.attr('class', ui.item.siblings().attr('class')) 
     } 
    }).disableSelection(); 
}); 

Это изменило бы ui-state-default к ui-state-highlight и наоборот.

+0

один вопрос, когда вы перемещаете элемент в тот же блок в это время также изменение класса, но это нехорошо, я имею в виду, когда элемент перемещается в один и тот же блок в тот момент, класс не меняется. –

+0

Ах, да. Обновлен мой ответ. Существует более эффективный способ, используя 'ui.sender' Refer -http: //api.jqueryui.com/sortable/#event-stop. Но по какой-то причине это не поддерживается в вашей версии пользовательского интерфейса jQuery. –

Смежные вопросы