2012-04-24 118 views
0

我正在使用tablesorter与MVC 3和html helpers填充每个循环,通过对象中的项目循环内的列。这工作正常,我的HTML表格正在填充我想要的方式。但我有一个问题排序的员工姓名,这是在表中的第二列,它看起来像这样:jQuery tableSorter不排序前两行

   <td class="reviewedEmployee"> 
        @Html.TextBox("Employees", item.FirstName + " " + item.LastName, new { style = "width:auto !important; text-align:center;" }) 
       </td> 

当我点击了“员工”称号,这是正确的格式使用表分拣机,没有排序发生。但是当我点击另一列时,如“审阅者列表”(它是来自选择列表的@ Html.ListBox),它按该列进行排序。我可以再次点击“员工”标题,它会进行更改,但它们不是按字母顺序排列的(名字+姓氏)。还排序第一列,“年”,这只是显示无论是2011年或2012年

这里不工作是我的JS:

$(document).ready(function() { 
     $('table.tablesorter').tablesorter({ textExtraction: 'complex' }) 
      .tablesorterPager({ container: $("#pager"), size: $(".pagesize option:selected").val() }); 
}); 

我试图在摆脱空间的“员工“列数据,我从tablesorter中删除了”textExtaction“属性。任何其他想法?

UPDATE:我的表中的数据输入的标签,所以我需要找出如何按值排序,可能通过增加tablesorter.AddParser()方法返回一个里面输入.VAL细胞()标签。

+0

请添加表格的一些呈现HTML ... – powtac 2012-04-25 16:36:02

+0

请参阅我的答案以下我的修复。我并没有最终需要@ Html.TextBoxFor(),只是用@ item.property去获得一个原始的HTML文本字段。如上所述,我的表具有正确的语法,但tablesorter似乎并不喜欢在对value属性进行排序时呈现的输入标记。我确实为tablesorter创建了一个自定义分析器,以便对value属性进行排序,但它仍然无效。 – 2012-04-25 20:10:38

回答

0

而不是使用输入由剃刀视图呈现的标记,我使用HTML助手从数据库中获取名字和姓氏,该名字在表格中以原始文本形式出现。出于某种原因,tablesorter无法排序任何有输入的行。

修复:添加一个隐藏字段与设置为可见字段值的值相同。

我的修复程序:获得原始文本后,我实现了我自己的自定义解析器设置,按姓氏对列进行排序。

$.tablesorter.addParser({ 
    id: "lastName", 
    is: function (s) { 
     return false; 
    }, 
    format: function (s) { 
     ret = s.split(' '); 
     return ret[ret.length-1] 
    }, 
    type: "text" 
}); 

另外,我补充span标签到原始的HTML给风格和其他属性,如在jQuery的选择时,新的数据提交更新表的类。见下:

 //if data is changed, trigger an update on the text boxes to make sure filtering is up to date. 'allocation' is any dynamic field in a row such as textbox 
    $(".allocation").change(function() { 
     $("#manageReviewsTable").trigger("update"); 
     $("#manageReviewsTable").trigger("appendCache"); 
    }); 

如有任何疑问,下方评论!