2012-05-08 3 views
1

これは私のJSです。ソートはhh:mm a形式の時間です。私はそれを実行するとエラーが表示されます:oSort [(sDataType?sDataType: "string")+ " - " + aaSort [i] [1]]は関数ではありません私は列のデフォルトでソートしようとしています私はその並べ替えを宣言します。最初の2つまたは最後の列のソートは機能しますが、他の列のいずれかにデフォルト設定しようとすると気に入らなくなります。 DataTableは、sDataTypeが初期化中にこれらの列の内容を把握するのに苦労しているようです。これを投稿することはほとんど恥ずかしいaaSortingはaoColumnsを使用して定義されたカスタムソートを認識できません

<script type="text/javascript"> 

$(document).ready(function() { 
    $('#example').dataTable({ 

     "bJQueryUI": true, 
     "iDisplayLength": 50, 
     "aoColumns": [ 
      null, 
      null, 
      { "sType": 'string-case' }, 
      { "sType": 'string-case' }, 
      { "sType": 'string-case' }, 
      { "sType": 'string-case' }, 
      null 
     ], 
     "aaSorting": [[ 2, 'desc']] 
    }); 
}); 

function getTimeValue(x) { 
    var time = x.match(/(\d+)(?::(\d\d))?\s*(P?)/); 
    var h = parseInt(time[1],10) + (time[3] ? 12 : 0); 
    if(!time[3] && parseInt(time[1],10)==12) h = 0; 
    if(time[3] && parseInt(time[1],10)==12) h = 12; 
    return h * 60 + (parseInt(time[2],10) || 0); 
} 

/* Define two custom functions (asc and desc) for string sorting */ 
jQuery.fn.dataTableExt.oSort['string-case-asc'] = function(x,y) { 

    x = getTimeValue(x); 
    y = getTimeValue(y); 

    return ((x < y) ? -1 : ((x > y) ? 1 : 0)); 

}; 

jQuery.fn.dataTableExt.oSort['string-case-desc'] = function(x,y) { 

    x = getTimeValue(x); 
    y = getTimeValue(y); 

    return ((x < y) ? 1 : ((x > y) ? -1 : 0)); 
}; 

答えて

3

が、それは他の誰かを助けている場合、それはそれの価値があるでしょう。簡単な説明:getTimeValueとjQuery.fnはDataTableを呼び出す前に初期化する必要があるので、$(document).ready(function()の前に3つの関数を移動する必要がありました。対称的なプログラミングエラーでもあります - bleh。

関連する問題