Save value to variable

2

I'm using jQueryUI - Sortable to change the positions of the data in a table. However, I need to save the starting position (the position the line was before dragging) and the end position (where the line was dragged). These variables, I will use as a parameter to call a query ajax .

My table looks like this:

<h1>Classificar tabela utilizando jQuery UI</h1>
<a href='http://www.jqueryui.com/sortable/'>MjQuery UI - Sortable</a>

<table id="sort" class="grid">
    <thead>
        <tr><th class="index">Nº</th><th>Ano</th><th>Título</th><th>Tipo Sanguíneo</th></tr>
    </thead>
    <tbody>
        <tr><td class="index">1</td><td>1969</td><td>Fulano de Tal</td><td>A+</td></tr>
        <tr><td class="index">2</td><td>1952</td><td>Ciclano da Silva</td><td>B</td></tr>
        <tr><td class="index">3</td><td>1963</td><td>Beltrano Pereira</td><td>A+</td></tr>
        <tr><td class="index">4</td><td>1973</td><td>Joãozinho Mendes</td><td>C</td></tr>
        <tr><td class="index">5</td><td>1965</td><td>José Ciclano</td><td>A</td></tr>
    </tbody>
</table>

And I'm using the following code to "sort out" values:

var fixHelperModified = function(e, tr) {
    var $originals = tr.children();
    var $helper = tr.clone();
    $helper.children().each(function(index) {
        $(this).width($originals.eq(index).width())
    });
                console.log(tr.clone());
    return $helper;

},
    updateIndex = function(e, ui) {
        $('td.index', ui.item.parent()).each(function (i) {
            $(this).html(i + 1);
            console.log($(this).html(i + 1).val);
        });
    };

$("#sort tbody").sortable({
    helper: fixHelperModified,
    stop: updateIndex
}).disableSelection();

In my code, I need to create a variable to save the values of the positions (initial and final).

I have a working example in JSFiddle . Just drag and drop the line to better understand what I've tried to explain.

    
asked by anonymous 25.06.2015 / 20:00

1 answer

1

See this example on JSFIDDLE

I found here StackOverFlow - Sortable Change event element position

I put a console.log(pos); which shows you the return with beginning and end of each movement.

var comeco,final;
$( "#sortable" ).sortable({
    change: function(event, ui) {		
        var pos = ui.helper.index() > ui.placeholder.index() 
            ? { start: ui.helper.index(), end: ui.placeholder.index() }
            : { start: ui.placeholder.index(), end: ui.helper.index() }
       comeco = pos.start;  
        final = pos.end; 
         ui.item.startPos = ui.item.index();
        $(this)
            .children().removeClass( 'highlight' )
            .not( ui.helper ).slice( pos.start, pos.end ).addClass( 'highlight' );
    },
    stop: function(event, ui) {
        $(this).children().removeClass( 'highlight' );
        console.log("nova: " + ui.item.index());
        console.log("inicial: " + ui.item.startPos);
    }
});
#sortable { 
    list-style-type: none; 
    margin: 0; 
    padding: 0; 
    width: 60%; 
}
.ui-state-default { 
    border: 1px solid #d3d3d3;
    background-color: #E4E4E4;
    margin: 0 3px 3px 3px; 
    padding: 0.4em;
    font-size: 1.4em; 
    height: 18px; 
}
.highlight{
    background-color: #B24926;	
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script><scriptsrc="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<ul id="sortable">
    <li class="ui-state-default">Item 1</li>
    <li class="ui-state-default">Item 2</li>
    <li class="ui-state-default">Item 3</li>
    <li class="ui-state-default">Item 4</li>
    <li class="ui-state-default">Item 5</li>
    <li class="ui-state-default">Item 6</li>
    <li class="ui-state-default">Item 7</li>
    <li class="ui-state-default">Item 8</li>
    <li class="ui-state-default">Item 9</li>
</ul>
    
25.06.2015 / 20:28