Как условно применить виджет jQuery Sortable UI к таблице (ASP.NET GridView)? - PullRequest
5 голосов
/ 26 июля 2011

У меня есть следующий код, который применяет плагин jQuery UI Sortable ко всем таблицам (GridView) на странице ASP.NET, за исключением первой строки (заголовка) в каждой:

function pageLoad() {
    $('table').sortable({
        items: 'tr:not(:first)',
        axis: 'y',
        scroll: true,
        start: startDrag, //store start position
        stop: stopDrag    //get end position, update database
    }).disableSelection();

Однако я хочу применить сортировку к таблице только в том случае, если имеется более одной строки (в дополнение к строке заголовка), в противном случае функция перетаскивания является избыточной.

Как можно условно применить вышеуказанное только к таблицам, имеющим более одной строки содержимого? Спасибо.

Ответы [ 2 ]

5 голосов
/ 26 июля 2011

jquery filter() предоставляет решение.Позволяет фильтровать набор совпадающих элементов с помощью тестовой функции.Поэтому следующий код применяется sortable только к таблицам, имеющим более одной строки данных:

function pageLoad() {

    $('table').filter(function () {
                        return $('tr', this).length > 2;
                      })
              .sortable({
                 items: 'tr:not(:first)',
                 axis: 'y',
                 scroll: true,
                 start: startDrag, //store start position
                 stop: stopDrag    //get end position, update database
                 })
              .disableSelection();
}
0 голосов
/ 28 июля 2011

В ответ на приведенные выше запросы nydcan метод startDrag выглядит следующим образом:

 function startDrag(event, ui) {
    var startIndex = ui.item.index();
    ui.item.data('startIndex', startIndex);
}

А метод stopDrag выглядит следующим образом:

function stopDrag(event, ui) {
    var startIndex = ui.item.data('startIndex');
    var endIndex = ui.item.index();
    if (startIndex != endIndex) {
        $.ajax({
            type: 'POST',
            url: '<%= ResolveUrl("~/MyPage.aspx/UpdateOrder") %>',
            contentType: 'application/json; charset=utf-8',
            data: "{ 'startIndex':'" + startIndex + "', 'endIndex':'" + endIndex + "'}",
            dataType: 'json',
            success: updateSuccess,
            error: updateError
        });
    }
}

У меня есть веб-метод (VB.NET) на моей странице вот так:

<System.Web.Services.WebMethod()>
Public Shared Sub UpdateRulePriority(ByVal startIndex As Integer, ByVal endIndex As Integer)

    'Do stuff

End Sub

Надеюсь, что поможет.

...