Esempio Edit e Aggiorna w2ui Versione 1.4.3, on Click and onSelect it's working fine and multiselect it's able untill 5 records selected,
clicking variazione residenza button you can see the final right array in console browser

L'esempio sotto mostra cosa succede al click del bottone 'chiamata deferred', viene invocata la funzione chiamataCallbak dove al suo interno con la dicitura $.when(deferred).then(function(rispostaDeferred)) viene invocata la funzione 'chiamata()' la quale interroga il server che in questo esempio risponde print 'OK|callbackSuccess' questa risposta viene gestita nel then dell'ajax della funzione chiamata() facendo lo split della risposta e recuperando il primo elemeno che in questo caso è OK a questo punto la variabile pippo prende il valore 'Successo uno ' che viene gestito all'interno della callback/promessa then(function(rispuno)) se rispuno che sarebbe il valore ritornato pippo dell'ogetto deferred, è uguale a Successo uno parte la seconda chiamata alla funzione/oggetto deferred chiamataDue che con la stessa logica ritorna in callback/promessa la variabile pippo della chiamataDue, in questo modo si possono attaccare infinite chiamate sincrone la chiamata due viene effettuata solo se pippo=='Successo uno' se nel server al posto di OK|callbackSuccess ritornasse KO|callbackSuccess non partirebbe la seconda chiamata. Se al posto di $.when(chiamata()).then(function(rispuno)) scrivessimo $.when(chiamata(),chiamataDue()).then(function(rispuno,rispdue){}) avremmo le chiamate asincrone quindi tutti e due i deferred ajax partono in modalità asincrona ma avremmo in un'unica callback la gestione delle due risposte
function chiamataCallback(){ $.when(chiamata()).then(function(rispuno){ if (rispuno == 'Successo uno'){ return chiamataDue(); } if (rispuno == 'Errore uno'){ w2alert('errore uno'); } }).then(function(rispdue){ if (rispdue == 'Successo due'){ w2alert('Successo due submit'); } if (rispdue == 'Errore due'){ w2alert('Errore due'); } }); } function chiamata(){ return $.ajax({ url:'indice?metodo=callback', type:'POST', dataType:'html' }).then(function(data) { risultato = data.split('|'); controllo = $.trim(risultato[0]); if (controllo=='OK'){ pippo='Successo uno'; } if (controllo=='KO'){ pippo = 'Errore uno'; } return pippo; }); } function chiamataDue(){ return $.ajax({ url:'indice?metodo=callbackDue', type:'POST', dataType:'html' }).then(function(data){ risultato = data.split('|'); controllo = $.trim(risultato[0]); if (controllo=='OK'){ pippo='Successo due'; } if (controllo=='KO'){ pippo = 'Errore due'; } return pippo; }); }