Quote Originariamente inviata da KillerWorm Visualizza il messaggio
Ho dato uno sguardo

Prima cosa: non tenere conto di quanto ho indicato nei post precedenti. Non conoscendo il plugin ho scritto qualche castroneria facendo supposizioni errate

In realtà la tabella viene aggiornata regolarmente quando manovri i checkbox. Gli elementi che sono mostrati a video sono esattamente parte di quelli che stanno dentro l'istanza dataTable.

Il problema sta in quel ciclo del submit, come avevi immaginato tu.

Analizzando meglio ciò che va a fare quello script, si può rilevare un problemi di logica.

Traducendo lo script in umanese:

- Ciclo tutti i checkbox
- Considero solo quelli che NON sono già mostrati sulla pagina (dal momento che quelli visibili sulla pagina sono già considerati come dati da inviare col form)
- Per ognuno di quelli non mostrati, verifico se è selezionato
- Se lo è, allora creo una sua copia hidden nel form (così che sia considerato come dato del form)
- Se non lo è, allora rimuovo dalla pagina TUTTI gli hidden

Puoi capire quindi che quest'ultima azione, se l'ultimo box esaminato NON risulta selezionato, va a rimuovere comunque TUTTI gli hidden appena creati dal ciclo stesso.

Ora, nel caso in cui si usa la funzione "seleziona tutto", l'ultimo checkbox nella tabella risulterà selezionato, e per tale motivo non avverrà quell'ultima azione.

Invece, selezionando qualche checkbox in una singola pagina della tabella, questi saranno comunque considerati perché sono già presenti nel form; non le copie hidden che invece verrebbero erroneamente rimosse.

Spero di aver chiarito la causa del problema, o quantomeno di non averti creato maggiore confusione

Per risolvere, basterà spostare quell'azione prima che sia eseguito il ciclo; per cui, tutti gli hidden del form sono rimossi preventivamente, quindi sono ricreati, attraverso il ciclo, solo quelli relativi ai ceckbox selezionati e non presenti già nel DOM.

Potrebbe essere una cosa del genere:
codice:
$('form').on('submit', function(e){

   var $form = $(this);

   // Rimuovo TUTTI gli input hidden del form
   $form.find("input[type='hidden']").remove();

   // Ciclo SOLO i checkbox selezionati della tabella
   table.$('input:checked').each(function(){

      // Se questo checkbox non è già nel DOM
      if (!$.contains(document, this)){

         // Creo la copia hidden
         $form.append(
            $('<input>')
               .attr('type', 'hidden')
               .attr('name', this.name)
               .val(this.value)
         );
      }
   });
});



Ultima considerazione: dal momento che al submit vengono considerati i checkbox visibili sulla pagina (che siano checked oppure no), mentre gli hidden non posseggono la proprietà "checked", lato server dovrai fare attenzione a come valutare questi elementi; cioè dovrai prendere in considerazione tutti gli hidden come fossero dei checkbox checked, mentre i checkbox (che sono quelli restati visibili nella pagina) vanno verificati considerando solo i checked. Presumo tu abbia già considerato questo, in quanto valeva anche nel caso del "seleziona tutto".

Fai sapere.

Funziona tutto perfettamente , grazie mille