et si tu remplaçais
par
edit: galère les copié/collé de code …
et si tu remplaçais
par
edit: galère les copié/collé de code …
Bon en fait j’ai trouvé en cherchant y’avais des discutions là dessus donc j’ai trouvé pour récupérer les lignes cachés. Résultat, ça marche bien et ça coche sur toutes les pages. par contre à l’enregistrement, ça m’a l’air de sauvegarder que les changements de la page courante (la case à cocher est un champ de mes contacts)
La fonction :
[CODE]
$.fn.dataTableExt.oApi.fnGetHiddenNodes = function ( oSettings )
{
/* Note the use of a DataTables ‘private’ function thought the ‘oApi’ object */
var anNodes = this.oApi._fnGetTrNodes( oSettings );
var anDisplay = $(‘tbody tr’, oSettings.nTable);
/* Remove nodes which are being displayed */
for ( var i=0 ; i<anDisplay.length ; i++ )
{
var iIndex = jQuery.inArray( anDisplay[i], anNodes );
if ( iIndex != -1 )
{
anNodes.splice( iIndex, 1 );
}
}
/* Fire back the array to the caller */
return anNodes;
};
[/CODE]
Mon implémentation :
[CODE]
var oTable = $(’#contacttable’).dataTable();
$('#checkall').click( function () {
$('input', oTable.fnGetNodes()).attr('checked',$('#checkall').is(':checked'));
$('input', oTable.fnGetHiddenNodes()).attr('checked',$('#checkall').is(':checked'));
} );
[/CODE]
C’est normal, ton form ne valide que les elements contenus entre les 2 balises et , ie ce qui est dans le code html au moment ou tu cliques sur le bouton enregistrer.
Il faut que tu envoies à ton form l’intégralité de ton tableau, pour cela , t’as plusieurs solutions
Yep merci :). Le site de datatables est vraiment complet. J’ai vu et exemple :
[CODE]
var oTable;
$(document).ready(function() {
$(’#form’).submit( function() {
var sData = $(‘input’, oTable.fnGetNodes()).serialize();
alert( “The following data would have been submitted to the server: \n\n”+sData );
return false;
} );
oTable = $(’#example’).dataTable();
} );
[/CODE]
Chez eux ça semble marcher. Chez moi, en cliquant sur le bouton enregistrer, ça m’affiche pas l’alerte. Doit y avoir un truc avec le formulaire salesforce. Je vais tenter de voir ça :).
Parceque l’id de ton form n’est pas myForm mais j_id0:myform
tu dois avoir une fonction qui permet de recup le node du form via ton plugin, remplace cette appel avec $(’#myForm’)
Yep j’ai essayé avec le #j_id0:myform mais ça semble pas marcher non plus, c’est vraiment bizarre. Je continue de cherche si y’a moyen de récupérer le formulaire autrement
faut p’tet rajouter
oTable = $(’#example’).dataTable();
dan ta fonction
var oTable;
$(document).ready(function() {
$(’#form’).submit( function() {
oTable = $(’#example’).dataTable(); <---------------
var sData = $(‘input’, oTable.fnGetNodes()).serialize();
alert( “The following data would have been submitted to the server: \n\n”+sData );
return false;
} );
oTable = $(’#example’).dataTable();
} );
Nope c’est pas ça, elle est définie avant, je l’utilise pour une autre fonction. Le truc c’est que je pense que ça merde avec le $(’#form’).submit(function() car je n’ai pas l’alerte donc la fonction doit pas être appelé, ce qui s’expliquerait si l’id est pas bon ou un truc du genre
oui il faudrait l’appeler
$('#j_id0:myform').submit( function() {
et ça marche pas avec ça d’après ce que tu dis
Oui déjà essayé avec ça et ça marche pas mais ça doit venir de là. J’ai pas encore eu le temps de chercher cet après midi mais je vais investiguer.
bon, essaie autre chose
dans la balise rajoute un rel=“monform” et appelle le comme ca avec JQuery $(“form[rel=‘monform’]”)
autre idee, ton plugin intercepte deja le submit du form. donc tente deja de faire apparaitre l’alert du le simple click du bouton
$(’#TheButton’).click(alert(‘toto’));
si ca marche, alors remplace l’alert par une fonction qui submit le form, ca devrait declencher l’event submit et voit ou tu passes (install FireBug pour executer le JS pas à pas)
Alors :
Donc la solution serait bien d’appeler une méthode lors du onsubmit. Je remanie le code comment ? En tout cas merci de prendre tout ce temps pour m’aider !
tu peux remplacer $(’#maPage:monForm’) par $(’#maPage:monForm’) ?
Nope toujours pas :
Uncaught Error: Syntax error, unrecognized exp<b></b>ression: unsupported pseudo: myForm
Bon j’ai trouvé !
$("form[id='thePage:myForm']").submit( function() {
Plus qu’à tester en live.
GG ! j’avais une autre méthode plus degueu :
$(’#maPage’+’:’+‹ monForm ›)
Héhé :). Bon par contre, que je comprenne bien, le code :
$("form[id='thePage:myForm']").submit( function() {
var sData = $('input', oTable.fnGetNodes()).serialize();
alert( "The following data would have been submitted to the server: \n\n"+sData );
return false;
} );
oTable = $('#contacttable').dataTable();
il est sensé passer la table entière lors du submit ou y’a quelque chose de plus à faire ?
Bon sinon l’action qui est normalement associé à mon bouton enregistrer, qui post automatiquement le formulaire au serveur pour mettre à jour la classe qui sert de controler à ma page, se déclenche pas. Le jquery doit prendre le pas dessus. Bon par contre j’ai un moyen d’appeler la classe avec du javascript. Je l’ai jamais fait mais je vais essayer histoire d’appeler ma méthode « enregister » dans ma classe
Quelle merde, tout ça pour essayer d’améliorer l’expérience utilisateur… J’aurais du laisser les écrans de loading
le submit ne fait que serialiser ton tableau et l’afficher dans une alert, il renvoit meme false à la fin pour arreter le submit.
Donc virer le return false, affecter la valeur de la variable sData à un type hidden et coté serveur tu traites la serialisation passé par cette variable.
Arf ouai bon je suis pas équipé pour faire ça. Disons qu’en natif, le tableau est une liste d’objet qui sont automatiquement bindé avec le serveur. En temps normal, un submit met automatiquement à jour les modifications dans les objets de la classe côté serveur. Du coup, si je veux pas à avoir à manipuler moi même les données (et encore une fois c’est pour que ça aille plus vite à l’affichage que je met du jquery, pas pour me compliquer la vie de l’autre côté ^^) autant trouver une solution alternative, comme afficher l’ensemble du tableau en virant la pagination ou je ne sais quoi au moment du submit. J’essaierais ça la semaine prochaine
Pour info, le ‘:’ devait t’embêter parce que jquery devait penser qu’il s’agit d’une pseudo-classe (comme :first pour n’avoir que le premier élément), donc en effet en indiquant sans équivoque que ça fait partie de l’id ça marche bien.
Sinon pour que jquery ne crie pas avec les “:” il faut mettre \ devant (oui deux, c’est pas une faute de frappe) et là, plus de problème!