Search code examples
javascriptjquerysortablejs

How can I disable sort on a specific element?


I'm having difficulty disabling sorting on a specific li in my ul. I'm using SortableJS.

<ul id="items">
    <li class="static">
        <div class="image"><img src="image.jpg" /></div>
        <div class="text">Static</div>
        <div class="clearboth"></div>
    </li>
    <li>
        <div class="image"><img src="image.jpg" /></div>
        <div class="text">Dynamic</div>
        <div class="clearboth"></div>
    </li>
    <li>
        <div class="image"><img src="image.jpg" /></div>
        <div class="text">Dynamic</div>
        <div class="clearboth"></div>
    </li>
</ul>

One li with class static should NOT be sortable. The others should be sortable.

var el = document.getElementById('items');

var sortable = new Sortable(el, {
    onUpdate: function (evt) {
        var itemEl = evt.item;

        // here happens some stuff
    },
    filter: '.js-remove',
    onFilter: function (evt) {
        // here happens some stuff
    }
});

I know you can do it in jQuery UI sortable like this:

$( ".sortable" ).sortable({
    cancel: ".static"
});

How can I do this in SortableJS?


Solution

  • Further to @BenG comment, you need to use filter instead of cancel.

    var el = document.getElementById('items');
    var sortable = Sortable.create(el, {
       filter: ".static"
    });
    <script src="//cdnjs.cloudflare.com/ajax/libs/Sortable/1.4.2/Sortable.min.js"></script>
    <link href="http://rubaxa.github.io/Sortable/st/app.css" rel="stylesheet" />
    <ul id="items" class="block__list block__list_words">
        <li>item 1</li>
        <li class="static">item 2</li>
        <li>item 3</li>
    </ul>