[ sortTable ] problème pour trier des colonnes par statut (checked)

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [ sortTable ] problème pour trier des colonnes par statut (checked)

par VaN » 03 avr. 2008, 16:22

Je ne pense pas, car en fait chaque fonction est dupliquée, car j'ai besoin sur d'autres pages de faire un tri decroissant par défaut, lorsque je charge le tri de tableau. C'est pour ça que dans le script entier, il y'a 2 fonctions générales,

Code : Tout sélectionner

function sortableTable(tableIDx,intDef,sortProps){ }
et

Code : Tout sélectionner

function sortableTableDesc(tableIDx,intDef,sortProps){ }
.

Pour mon problème de tri de checkbox, c'est sortableTable() que j'apelle, donc il ne devrait prendre en compte que cette fonction sort2dFnc() ci.

par Ryle » 03 avr. 2008, 15:30

Hmm... ta fonction sort2dFnc est présente deux fois dans le fichier... une fois dans sortableTable() et l'autre dans sortableTableDesc() ... le fait que tu n'ais complété que la première et pas la seconde ne jouerait pas sur le résultat de ton tri ?

[ sortTable ] problème pour trier des colonnes par statut (c

par VaN » 03 avr. 2008, 15:15

Bonjour,

J'utilise un script pour trier un tableau sans recharger la page, en Javascript. Dans ce tableau, tout fonctionne bien (tri par int, string, date), sauf lorsque je veux trier par checkbox cochées ou non. Normal, le script de base de gère pas le tri de checkbox.

J'ai donc tenté de modifier le script, mais ça ne fonctionne pas encore.

Voici la fonction qui s'occupe du tri :

Code : Tout sélectionner

function sort2dFnc(a,b){ var col = intCol; var dir = intDir; var aCell = a.getElementsByTagName("td")[col].innerHTML; var bCell = b.getElementsByTagName("td")[col].innerHTML; switch (strMethod){ case "int": aCell = parseInt(aCell); bCell = parseInt(bCell); break; case "float": aCell = parseFloat(aCell); bCell = parseFloat(bCell); break; case "date": parts = aCell.split("/"); var aCell = new Date(0); aCell.setDate(parts[0]); aCell.setMonth(parts[1]); aCell.setFullYear(parts[2]); aCell = new Date(aCell); parts = bCell.split("/"); var bCell = new Date(0); bCell.setDate(parts[0]); bCell.setMonth(parts[1]); bCell.setFullYear(parts[2]); bCell = new Date(bCell); break; } return (aCell>bCell)?dir:(aCell<bCell)?-dir:0; }
J'ai donc tenté de rajouter un case "input", ainsi :

Code : Tout sélectionner

case "input": aState = a.getElementsByTagName("td")[col].getElementsByTagName("input").checked; if(aState == true) aCell = 1; else aCell = 0; bState = b.getElementsByTagName("td")[col].getElementsByTagName("input").checked; if(bState == true) bCell = 1; else bCell = 0;
Mais ça ne fonctionne pas, le tri se fait de façon totalement aléatoire, et ne regroupe pas les checkbox cochées ensemble.

Des idées ?

Merci d'avance

Voici la totalité du fichier qui s'occupe du tri, sortTable.js, si ça peut aider :

Code : Tout sélectionner

function sortableTable(tableIDx,intDef,sortProps){ var tableID = tableIDx; var intCol = 0; var intDir = 1; var strMethod; var arrHead = null; var arrMethods = sortProps.split(","); this.init = function(){ arrHead = document.getElementById(tableID).getElementsByTagName('thead')[0].getElementsByTagName('th'); for(var i=0;i<arrHead.length;i++){ arrHead[i].onclick = new Function(tableIDx + ".sortTable(" + i + ",'" + arrMethods[i] + "');"); } this.sortTable(intDef,arrMethods[intDef]); } this.sortTable = function(intColx,strMethodx){ intCol = intColx; strMethod = strMethodx; var arrRows = document.getElementById(tableID).getElementsByTagName('tbody')[0].getElementsByTagName('tr'); intDir = (arrHead[intCol].className=="asc")?-1:1; arrHead[intCol].className = (arrHead[intCol].className=="asc")?"des":"asc"; for(var i=0;i<arrHead.length;i++){ if(i!=intCol){arrHead[i].className="";} } var arrRowsSort = new Array(); for(var i=0;i<arrRows.length;i++){ arrRowsSort[i]=arrRows[i].cloneNode(true); } arrRowsSort.sort(sort2dFnc); for(var i=0;i<arrRows.length;i++){ arrRows[i].parentNode.replaceChild(arrRowsSort[i],arrRows[i]); arrRows[i].className = (i%2==0)?"":"alt"; } } function sort2dFnc(a,b){ var col = intCol; var dir = intDir; var aCell = a.getElementsByTagName("td")[col].innerHTML; var bCell = b.getElementsByTagName("td")[col].innerHTML; switch (strMethod){ case "int": aCell = parseInt(aCell); bCell = parseInt(bCell); break; case "float": aCell = parseFloat(aCell); bCell = parseFloat(bCell); break; case "date": parts = aCell.split("/"); var aCell = new Date(0); aCell.setDate(parts[0]); aCell.setMonth(parts[1]); aCell.setFullYear(parts[2]); aCell = new Date(aCell); parts = bCell.split("/"); var bCell = new Date(0); bCell.setDate(parts[0]); bCell.setMonth(parts[1]); bCell.setFullYear(parts[2]); bCell = new Date(bCell); break; case "input": aState = a.getElementsByTagName("td")[col].getElementsByTagName("input").checked; if(aState == true) aCell = 1; else aCell = 0; bState = b.getElementsByTagName("td")[col].getElementsByTagName("input").checked; if(bState == true) bCell = 1; else bCell = 0; } return (aCell>bCell)?dir:(aCell<bCell)?-dir:0; } } // La même fonction, mais pour faire un tri DESC par défaut function sortableTableDesc(tableIDx,intDef,sortProps){ var tableID = tableIDx; var intCol = 0; var intDir = 1; var strMethod; var arrHead = null; var arrMethods = sortProps.split(","); this.init = function(){ arrHead = document.getElementById(tableID).getElementsByTagName('thead')[0].getElementsByTagName('th'); for(var i=0;i<arrHead.length;i++){ arrHead[i].onclick = new Function(tableIDx + ".sortTable(" + i + ",'" + arrMethods[i] + "');"); } this.sortTable(intDef,arrMethods[intDef]); } this.sortTable = function(intColx,strMethodx){ intCol = intColx; strMethod = strMethodx; var arrRows = document.getElementById(tableID).getElementsByTagName('tbody')[0].getElementsByTagName('tr'); intDir = (arrHead[intCol].className=="des")?1:-1; arrHead[intCol].className = (arrHead[intCol].className=="des")?"asc":"des"; for(var i=0;i<arrHead.length;i++){ if(i!=intCol){arrHead[i].className="";} } var arrRowsSort = new Array(); for(var i=0;i<arrRows.length;i++){ arrRowsSort[i]=arrRows[i].cloneNode(true); } arrRowsSort.sort(sort2dFnc); for(var i=0;i<arrRows.length;i++){ arrRows[i].parentNode.replaceChild(arrRowsSort[i],arrRows[i]); arrRows[i].className = (i%2==0)?"":"alt"; } } function sort2dFnc(a,b){ var col = intCol; var dir = intDir; var aCell = a.getElementsByTagName("td")[col].innerHTML; var bCell = b.getElementsByTagName("td")[col].innerHTML; switch (strMethod){ case "int": aCell = parseInt(aCell); bCell = parseInt(bCell); break; case "float": aCell = parseFloat(aCell); bCell = parseFloat(bCell); break; case "date": parts = aCell.split("/"); var aCell = new Date(0); aCell.setDate(parts[0]); aCell.setMonth(parts[1]); aCell.setFullYear(parts[2]); aCell = new Date(aCell); parts = bCell.split("/"); var bCell = new Date(0); bCell.setDate(parts[0]); bCell.setMonth(parts[1]); bCell.setFullYear(parts[2]); bCell = new Date(bCell); break; } return (aCell>bCell)?dir:(aCell<bCell)?-dir:0; } }