Newsgroup: it.comp.lang.javascript
Titolo: Validazione di più form con jquery e validation

buongiorno a voi, invidiati guru del js...
 
è una settimana che ci smanetto ma non ne vengo a capo, per cui
mi sono deciso a consultare questo NG.
Cercherò di essere sintetico ed esplicativo allo stesso tempo.
 
quello che ho fatto:
pagina ASP, con jquery e jquery-validation come plug-in, db access.
La pagina mi mostra un elenco di 30 righe con 5 colonne. Ogni riga
ha una div nascosta che posso far apparire per modificare i dati di una 
riga.
Ho fatto un ciclo in modo che ogni riga abbia un form proprio, definito dal
nome "form" + IDcampoChiave  del record corrente, stessa cosa per gli
imput di ogni form.
 
quello che voglio fare:
la validazione di un form con jq-validation è una bomba! mi riesce 
benissimo,
ma ora mi scontro con la necessità di applicare la stessa routine jq a più 
form.
 
i dubbi:
faccio bene a fare tanti form oppure meglio uno con campi denominati con ID?
Io pensavo di fare così in modo da inviare solo un piccolo gruppo di dati 
(del form
dove viene fatta la variazione) e non tutti i campi (anche quelli non 
variati) di un
unico form.
Non sono molto pratico di js, faccio delle piccole modifiche ma niente di 
importante,
per cui, trovata la giusta funzione su internet non so come renderla 
"universale"
per più form, capisco solo che devo in qualche modo passargli il nome del 
form da
validare dinamicamente (e anche attivare con qualche onclick la 
validazione), ma
non saprei come.
 
In pratica questo è un abbozzo della funzione che uso:
 
//validazione form
$(document).ready(function() {
    $("#myForm").validate({
        rules: {
            NOME: "required",
            COGNOME: "required"
        },
        messages: {
            NOME: "Inserisci il nome.",
            COGNOME: "Inserisci il cognome."
        }
    });
});
 
Vi ringrazio per l'eventuale aiuto
Nicola 
 

Dalla mancanza di risposte devo dedurre che non è possibile?
 
Nicola 
 

 Dalla mancanza di risposte devo dedurre che non è possibile?
 
No, penso sia più corretto dedurre che non c'è nessuno, tra chi segue 
questo newsgroup javascript, che usa bene jquery (quindi un sottogruppo) 
e che conosce il plug-in di cui stai parlando (quindi sotto-sottogruppo).

     $("#myForm").validate({
 
Dato che lo esegui al termine del caricamento della pagina, immagino che 
questo non faccia altro che associare l'evento "validate" al form con 
id="myForm".
Se così è, per esempio, potrebbe funzionare se togli il #: così a naso 
assocerai l'evento a tutti i tag "form" della pagina.

 assocerai l'evento a tutti i tag "form" della pagina.
 
Prima di tutto ti ringrazio per avermi concesso attenzione.
 
Credo che non funzionerebbe, in quanto la funzione jquery è fatta per
cercare un id.
Inoltre, i miei form hanno ognuno un nome e id univoco, quindi dovrei
incapsulare la routine jq in una funzione js che passi alla prima l'id del
solo form del quale io clicco il submit.
 
Per capirci, la struttura dei form è la seguente:
 
<form id="form_1" ......>
            -i vari input_1-
            -submit_1-
</form>
<form id="form_2" ......>
            -i vari input_2-
            -submit_2-
</form>
ecc.
 
Inoltre, e questo non c'entra con jq, è giusta l'impostazione
della pagina con più form?
Nicola
 
 

 Nicola
 
Hope it helps.

tempo",
 
tranquillo, era da intendere sempre UN form per volta (dato che ognuno 
contiene
il suo submit)
 
grazie, ciao
Nicola 
 

 cercare un id.
 
Sicuro? Hai provato?

 Nicola
 
Prego!
 

Ecco una versione molto spartana (che usa jquery) del concetto:
 
wwwWWWWOOOWWWWW!!!
Bellissimo! Funziona (quasi!) alla grande!
 
Bisogna ora risolvere due problemucci:
 
1) ho bisogno di passare l'ID del record modificato (per la pagina 
"update.asp).
Non voglio metterlo nella tabella (ho capito che solo così entra nel form), 
ho
provato anche ad aggiungere un <td> con stile visibility: hidden, ma lo 
spazio
per la cella appare comunque.
Come lo passo (ricorda che l'ID lo stampa, nella pagina, ASP)?
 
2) tutto l'ambaradan della domanda originale era per una VALIDAZIONE.
Siamo punto e a capo. Come mando in pasto i dati della riga editata alla
funzione di validazione, che è esterna alla funzione che mi hai passato?
Considera che il validatore, qualora entrasse in funzione, darebbe lui il
submit del form, e NON più la tua funzione, o no?
Quindi, a lume di naso, la funzione di validazione dovrebbe prendere
il posto del tuo: document.forms[0].submit();
 
La funzione di validazione è la seguente:
 
$(document).ready(function() {
    $("#questoForm").validate({
        rules: {
            NOME: "required",
            COGNOME: "required",
            NASCITA: {
    required: true,
    dateITA: true
   },
            EMAIL: "email"
        },
        messages: {
            NOME: "Inserisci il nome.",
            COGNOME: "Inserisci il cognome.",
   NASCITA: {
    required: "Inserisci la data di nascita.",
    dateITA: "La data valida &egrave; nel formato gg/mm/aaaa"
   },
   EMAIL: "Inserire una email valida"
        }
    });
});
 
 
grazie di nuovo, ciao
Nicola
 
Prego!
 
 

Sicuro? Hai provato?
 
ho provato, e ci sono riuscito!
Ho inserito il validatore in una funzione che gli
costruisce dinamicamente l'id del form da validare, così:
 
function Controlla(form_id) {
     var j=0;
     $("#updateForm" + form_id).validate({
        ...CUT
 
e poi nel pulsante di submit ho inserito: onclick="Controlla(<%= IDutente 
%>);"
 
Ma dopo aver ricevuto il messaggio di ZERO ho cambiato,
per cercare di utilizzare quel metodo che mi mangia decine
di righe di codice.
Quindi per ora mi tengo la tua versione in caldo, da utilizzare nel caso la
seconda fallisse. ;-))
 
Ciao e grazie
Nicola
 

    });
 
Ecco, questa è l'unica parte che devi mettere al posto della chiamata
`submit`. Ti suggerisco di mettere l'oggetto che rappresenta le opzioni
di validazione fuori però. Tipo assieme/dopo le variabili che ho
definito nel mio codice:
 
    // ..
    var form = document.forms[0];
    var txtID = form.txtID;
    var validateOptions = {
        rules : // ..
    };
 
E poi:
 
    $("a[href=#save]").click(function(event) {
        $(form).validate(validateOptions);
        event.preventDefault();
    });

definito nel mio codice:
 
di questo ne riparliamo quando funzionerà la prima parte ;-))
 
Ciao
Nicola 
 

    $(this.currentForm).submit();  <------- qui il submit???
 
Sembrerebbe di si, ovviamente bisogna vedere se passa da queste
condizioni. Prova a mettere un `alert` o un `console.log` (che vedi
dalla web console) e vediamo cosa ti risponde.

 si comporta come ti aspetti.
 
come detto non ho ancora utilizzato la validazione e la funzione che
mi hai dato è scritta così:
 
$(function() {
    var editable = $("#editable");
    var current = null;
    var inputs = editable.find("input");
    var myform = document.forms[1];  <--- è 1 perchè prima c'è un altro form
    var txtID = myform.IDutente;
 
    $("a[href=#save]").click(function(event) {
            	myform.submit();
                event.preventDefault();
    });
 
    $("a[href=#edit]").click(function(event) {
    	if (current) {
        	        current.show();
	}
                current = $(event.target).closest("tr");
                current.hide();
 
	txtID.value = current[0].id.substr(10);
 
                var cells = current[0].cells;
 
                for (var i = 0; i < inputs.length; i++) {
        	        inputs[i].value = cells[i].firstChild.nodeValue;
                        editable[0].cells[0].firstChild.nodeValue = 
cells[0].firstChild.nodeValue;
 
                        editable.insertBefore(current);
                        editable.show();
 
                        event.preventDefault();
	}
        });
})
 
Mentre l'html:
<form action="update.asp?gruppo=<%= IDclasse %>" id="updateForm" 
name="updateForm" method="post">
    ....qui ho messo il campo hidden con id=IDutente:
    <input type="hidden" name="IDutente" id="IDutente" value="" />
 
    ....continua con la costruzione della tabella dati
 
    ....la prima <td> è quella che dovrebbe contenere l'ID:
    <td id="IDutente<%= IDutente %>"><%= i %></td>
    (visualizzando l'HTML della pagina caricata effettivamente c'è l'ID
    nella forma IDutente123
 
    ....poi l'ultima <td> contiene:
    <a href="#edit" title="Modifica">Modifica</a>
    <a href="javascript:conferma('<br>ATTENZIONE! Il nominativo verr&agrave; 
eliminato.<br><br><img src=\'../images/alert_small.png\' width=\'32\' 
height=\'32\' alt=\'\' align=\'left\' /><h3 style=\'padding-top:5px;\'>&nbsp;Confermila cancellazione?</h3><br>', 'delete.asp?gruppo=<%= gruppo %>&id=<%= 
IDutente %>');" title="Cancella dalla lista"><img 
src="../images/cancella.gif" alt="Cancella" name="Cancella" /></a>
 
    ...poi la <tr>:
<tr id="editable" style="display:none">
 
    ...e infine l'ultima <td> contiene:
    <td><a href="#save" title="Salva variazioni" name="Salva 
variazioni">Salva</a>
 
 
 
Ciao
Nicola 
 

 name="updateForm" method="post">
 
Ciao
Nicola
 
 

    nella forma IDutente123
 
Si, ma è nell'elemento sbagliato.
Prova a correggere questo punto, e dovrebbe andare – a meno di altri
errori e/o differenze nel browser.

l'ID visibile, non stava nel TD bensì nel TR.
 
CAXXO CAXXO CAXXO CAXXO CAXXO
 
FUNZIONA!
 
Aspe'... non te ne andare che mo' si prova col validatore!
;-))
 
 

> Aspe'... non te ne andare che mo' si prova col validatore!
 
niente, le ho provate tutte... non riesco a far validare il form
 
penso che la funzione del plugin venga attivata da un evento
submit di un pulsante submit
 
ho provato di tutto, modificare la tua funzione inglobando
quella del plugin come tu mi hai suggerito, ma nulla
 
forse qui c'è qualche notizia utile:
http://docs.jquery.com/Plugins/Validation#Validate_forms_like_you.27ve_never_been_validating_before.21
 
 
Ciao
Nicola 
 

 
http://docs.jquery.com/Plugins/Validation#Validate_forms_like_you.27ve_never_been_validating_before.21
 
 
...Ora che vedo come funziona, credo che la soluzione sia la seguente:
 
     $(function() {
        var editable = $("#editable");
        var current = null;
        var inputs = editable.find("input");
        var form = document.forms[1];
        var txtID = form.IDutente;
 
        $(form).validate(/* .. le tue regole */);
 
        $("a[href=#save]").click(function(event) {
            form.submit();
            event.preventDefault();
        });
 
Se così non funziona, puoi sempre trasformare il link di `save` in un
pulsante di submit.
 
Let me know.

 pulsante di submit.
 
mi andrebbe bene, ma se sostituisco questo:
<a href="#save">Salva</a> con un submit, devo anche eliminare
tutta la parte corrispondente a #save nella tua funzione?
 
Avendo ora adottato il tuo metodo di editing, la validazione diventa
NECESSARIA, in quanto ho notato che se l'utente cancellasse completamente
il contenuto di un campo e poi salva, il risultato è un macello, forse
perchè la funzione shifta i contenuti dei campi dopo il salvataggio.
 
Inoltre, ravanando nel file js del validatore, ho trovato questo che
può essere interessante:
 
if ( validator.settings.onsubmit ) {
    var inputsAndButtons = this.find("input, button");
 
    // allow suppresing validation by adding a cancel class to the submit 
button
    inputsAndButtons.filter(".cancel").click(function () {
        validator.cancelSubmit = true;
    });
 
    // when a submitHandler is used, capture the submitting button
        if (validator.settings.submitHandler) {
            inputsAndButtons.filter(":submit").click(function () {
                validator.submitButton = this;
            });
        }
 
        // validate the form on submit
        this.submit( function( event ) {
            if ( validator.settings.debug )
                // prevent form submit to be able to see console output
                event.preventDefault();
 
            function handle() {
                if ( validator.settings.submitHandler ) {
	    if (validator.submitButton) {
	        // insert a hidden input as a replacement for the missing submit 
button
	        var hidden = $("<input type='hidden'/>").attr("name", 
validator.submitButton.name
).val(validator.submitButton.value).appendTo(validator.currentForm);
	    }
	    validator.settings.submitHandler.call( validator, 
validator.currentForm );
	    if (validator.submitButton) {
	        // and clean up afterwards; thanks to no-block-scope, hidden can be 
referenced
	    hidden.remove();
	    }
	    return false;
	}
	return true;
}
 
 

 perchè la funzione shifta i contenuti dei campi dopo il salvataggio.
 
Mhm? Non capisco il mio codice non "shifta" alcun contenuto. Se l'utente
cancella un campo questo viene inviato al server. Poi dipende da
quest'ultimo, come gestisce il campo vuoto e genera l'HTML di conseguenza.
 
Ricorda comunque di rispettare la regola d'oro della validazione dati:
quella lato client è opzionale, quella lato server è obbligatoria.
Si valida i dati lato client solo per offrire un'esperienza utente più
piacevole ed amichevole, non per una questione di sicurezza o altro. I
dati vanno comunque sempre e comunque validati sul server, perché non
puoi fidarti di ciò che il client ti invia, mai.

 quest'ultimo, come gestisce il campo vuoto e genera l'HTML di conseguenza.
 
Sarà difficile, ma cerco di descrivere la situazione al ritorno nella pagina
dopo aver effettuato la modifica di un campo (cancellandolo completamente).
 
Situazione nell'HTML: la pagina risulta scritta bene, manca solo
il dato cancellato dall'utente nel secondo <td>
 
Situazione a schermo:
Al ritorno dal salvataggio, nella riga dove il dato è stato precedentemente
cancellato non appare nulla nella cella (come dovrebbe), ma quando clicco su
"modifica" della stessa riga solo il primo campo contiene il dato, dal
secondo (quello vuoto) all'ultimo della riga sono invece vuoti.
Se continuo cliccando sulla riga precedente "modifica" tutto ok, ma se
poi torno nella riga modificata, questa volta mi mostra nei campi prima
vuoti i dati della riga precedente, e così via.
 
Quindi, se la tabella HTML è scritta bene, il macello lo fa la funzione
quando "rileva" i dati dell'HTML, dico bene?
 
Ciao
Nicola 
 

dimenticavo:
la cosa si verifica in IE9, Maxthon 3, Firefox e Chrome
 
Ciao
Nicola 
 

 quando "rileva" i dati dell'HTML, dico bene?
 
Non proprio. Da quel che mi dici la tabella non è scritta bene, a naso
direi che se la stringa è vuota hai un <td> senza contenuto, mentre
invece dovresti avere un <td> con un contenuto, anche vuoto. Ad esempio,
invece di avere:
 
    <td></td>
 
Dovresti avere:
 
    <td>
    </td>
 
O:
 
    <td>&nbsp;</td>
 
O qualsiasi altra cosa:
 
    <td>-</td>
 
etc.
 
Avere celle "vuote" crea problemi anche di rendering (a meno che non
sfrutti l'empty-cells da CSS). Se non vuoi aggiungere un contenuto
(anche vuoto, come in uno degli esempi) puoi optare per una chiamata a
jQuery – avevo iniziato una filippica su `textContent` e `innerText` e
il differente supporto da parte dei browser, ma poi mi sono ricordato
che usi jQuery, e tanto vale. Quindi invece di:
 
    for (var i = 0; i < inputs.length; i++)
        inputs[i].value = cells[i].firstChild.nodeValue;
 
Puoi avere:
 
    for (var i = 0; i < inputs.length; i++)
        inputs[i].value = $.text(cells[i]);
 
Mi sono anche dimenticato di dirti che la riga dopo:
 
    editable[0].cells[0].firstChild.nodeValue =
cells[0].firstChild.nodeValue;
 
Adesso che non hai l'ID a schermo è totalmente inutile e puoi rimuoverla.

 
ore di prove!
 
Un passo in avanti c'è.
 
Dunque, inserendo la funzione di validazione nella tua funzione come
mi hai consigliato, in effetti funziona, ma...
 
1) cosa:
Solo che NON blocca il submit in caso di mancata validazione, così che
io non riuscivo a vedere il messaggio di errore di validazione per quanto 
rapidamente
mi salvava e ritornava alla pagina.
Ho inserito subito prima di myform.submit(); un return; e magicamente ho 
visto il
messaggio del validatore.
 
2) cosa:
La validazione funziona con un errore nell'indirizzo email, ad esempio 
eliminando @
oppure non inserendo il .xx alla fine, oppure ancora non inserendo la data 
nel formato
giusto nel campo data.
Ma non da' segnali se cancello COMPLETAMENTE il contenuto di uno dei campi 
con
regola di validazione REQUIRED (e questo, naturalmente, mi impediva anche di 
sapere
se il validatore funzionava)
 
Ciao
Nicola
 
 

invece di avere:
 
questa cosa mi è nuova, il browser non ci mette nulla perchè nel db non
trova nulla. Poi, se questo significa che quando salvo i dati devo 
controllare
il nulla e devo salvare uno spazio è un altro paio di maniche.
 
ciao
nicola 
 

 il nulla e devo salvare uno spazio è un altro paio di maniche.
 
No, non quando salvi, "il nulla" – ovvero stringa vuota – è un valore
ammesso a livello di DB, solo che quando lo prendi e lo devi
visualizzare come HTML, è allora che devi gestirlo a modo in una
tabella. Ad esempio se tu dicessi che i TD devono avere dei bordi, se
scrivessi delle celle "senza niente" non ti visualizzerebbe tali bordi,
perché, appunto, è come se il tag TD fosse assente in quel punto (a meno
appunto di non gestire l'empty-cells).
 
Non è fondamentale, ma rischi di avere comportamenti di codice e di
rendering inconsistenti.

`form.submit()` e usare un pulsante come s'è detto.
 
Ti chiami ZERO, ma vali MILLE!!!
 
funziona!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
col pulsante ora funziona e valida tutto e tutti i campi.
 
Un ultimo sforzo e finiamo il lavoro (per ora!) ;-))
 
Succede una cosa che sicuramente (questa volta non puoi contaddirmi :-))
è attribuibile alla funzione che visualizza alternativamente il comando 
modifica
con quello salva.
 
Siccome uso delle icone per il modifica, una per modifica e una per 
cancellare il
record, oltretutto con una conferma popup, la funzione che fa:
quando visualizza il pulsante submit, evidentemente, ci infila dentro, in
qualche modo, tutta la roba della modifica, mostrandomi un pulsantone
di 10cm di lunghezza x 2 di altezza.
Infatti, se sostituisco le icone con il testo "Modifica", il pulsante di 
submit è normale
ma... con dentro il testo "Modifica" al posto di Invia.
 
Mo' che faccio?
 
ciao
nicola 
 

 Mo' che faccio?
 
Potresti cercare di analizzare la funzione che ti ho dato, e capire cosa
fa, e come interagisce con l'HTML della pagina.
A quel punto dovresti essere in grado di capire come mai il codice
originale nell'HTML originale non da alcun problema, e invece posto
nell'HTML che hai da quel genere di risultato.

nell'HTML che hai da quel genere di risultato.
 
ci provo, intanto, ma non sono abbastanza pratico di js per arrivarci:
 
secondo me è qui che fa lo scambio
 
for (var i = 0; i < inputs.length; i++) {    //per un numero di volte pari 
al numero di input
         inputs[i].value = $.text(cells[i]);    //inserisci nei campi il 
testo nelle celle
 
            editable.insertBefore(current); //sposta editable nella riga 
corrente?
            editable.show();                        //mostra editable
 
leggo giusto?
 
Se si allora è questo che mi crea dubbi:
inputs[i].value = $.text(cells[i]); //inserisci nei campi il testo nelle 
celle
 
Non è che prende il malloppo della cella "Azioni" ( $.text(cells[i]); )
e lo inserisce nell'input (inputs[i].value ), che in questo caso è un 
pulsante?
 
 
 
Ciao
Nicola
 

 pulsante?
 
Bravo. Prima questo ciclo era valido, perché `save` era un link, non un
<input />. Poi ho supposto tu l'avessi trasformato in un <button>,
seguendo la discussione, e dato che `inputs` contiene solo i tag <input
/>, non sarebbe stato presente. Questa è la ragione per cui ti ho
chiesto che tipo di tag fosse.

chiesto che tipo di tag fosse.
 
ok, provato col button, esce ugualmente gigantesco e in ogni caso fa
la validazione su errore e il submit in un lampo senza fermarsi al
messaggio d'errore (salva comunque i dati errati.
 
Che faccio???
 
Ciao
Nicola
 

Dimenticavo, io il button l'ho messo così:
 
<input type="button" name="SALVA" onclick="updateForm.submit()" 
value="salva" />
 
sbagliato?
 
Potrei usare un'immagine al posto dell'input button, ma resterebbe il 
problema del mancato
stop sul submit no?
 
Ciao
Nicola
 
 

 Che faccio???
 
Cosa ti dice la console degli errori?
 
Eventualmente puoi ripristinare il tag <input/> se ti genera altri
problemi (che io da qua non posso vedere, tu sei l'unico che può capire
cosa sta succedendo nel tuo HTML, che è il discriminante, non la
funzione javascript); e dato che la cella "azioni" è l'ultima della
riga, fermarti un ciclo prima invece di continuare per tutti gli <input
/> (speravo che questa prova l'avresti fatta / proposta tu, una volta
capito cosa non andava).

 sbagliato?
 
Si, è sbagliato. Come ti ho scritto in un post precedente, è un tag
<button/>, quindi:
 
    <button type="submit" name="SALVA">salva</button>
 
Per questo ti saltava la validazione, perché facevi il `submit` tramite
metodo – e come abbiamo visto, questo non fa scattare il `validate` del
plugin.

sempre `type="submit"` al button?
 
BINGO! Era qui il problema!!!
io conoscevo solo <input type="button" e non <button type="submit"
SEI GRANDE
 
Ciao
nicola 
 

 SEI GRANDE
 
Ottimo, mi fa piacere che si sia risolto la magagna. Cerca di studiarti
un po' il codice che ti ho dato e capire come funziona, e se ci sono
cose poco chiare non esitare a rivolgerti al NG. Lo scopo sarebbe
riuscire a capirlo totalmente e adattarlo meglio alle tue attuali e
future esigenze.

    });
 
allora, ho inserito nella tua funzione questa:
 
    var deleteMessage = $("delete-window").html();
    $(document.body).on("click", ".link-delete", function() {
        conferma(deleteMessage, this.href);
    });
 
mentre fuori di questa c'è "conferma()":
 
function conferma(testo, page) {
  $.prompt(testo,{
   buttons:{ Si: true, Annulla: false },
focus: 1,
callback: function(e,v,m,f) {
  if (v == true){
   location.href=page;
  }
  else{}
  }
});
}
 
Il comando per il delete è questo:
<a href="delete.asp?g=<%= IDgruppo %>&id=<%= IDutente %>" 
class="link-delete"></a>
 
Inserito insieme al comando Modifica nell'ultima cella della riga, cioè 
questo:
<a href="#edit" title="Modifica i dati" class="link-modify" ></a>
 
Prima del tag <form> ho inserito l'html della popup di conferma (ancora 
grezzo, poi applico gli stili giusti):
<div id="delete-window" style="display: none;">
            <br>ATTENZIONE! Il nominativo verr&agrave; 
eliminato.<br><br><img src="../images/alert_small.png" align="left" /><h3 
style="padding-top:5px;">&nbsp;Confermi la cancellazione?</h3><br>
</div>
 
Primo problema: ho inserito il display: none per evitare di farmi stampare 
l'html nella pagina.
Però, dubbio, quando la tua funzioncina "cattura" (se ho ben capito) l'html 
della div con id delete-windows,
si porta dietro anche il display: none? Oppure no? Oppure devo aprire a mano 
la visibilità? E se si,
come si fa???
 
Secondo problema, quando clicco su delete, il link funziona, cioè mi porta 
alla pagina asp di delete, ma non si
ferma a chiedermi la conferma. Molte volte vedo in un lampo la finestra 
popup, ma siccome il link trasporta
alla pagina delete.asp, essa rimane visibile per centesimi di secondo, e 
comunque non si ferma alla conferma.
QUESTA, IN PARTICOLARE, è una cosa che non ho mai capito in js: il link 
href, COSA NE SA che deve prima
eseguire una funzione??? Non se ne va per i fatti suoi alla pagina linkata?
 
Sono riuscito ad utilizzare la console errori di Opera (l'unica che segnala 
errori!) ed ecco che dice:
 
[01/04/2012 18:34:18] JavaScript - (la mia pagina)
Event thread: click
Uncaught exception: TypeError: Cannot convert 'message' to object
Error thrown at line 47, column 2 in <anonymous function: $.prompt>(message, 
options) in ... (file js impromptu)
    if(message.constructor == String)
called from line 57, column 2 in conferma(testo, page) in ...(mia pagina)
    $.prompt(testo,{
called from line 80, column 8 in <anonymous function>() in ...(mia pagina)
    conferma(deleteMessage, this.href);
called via Function.prototype.apply() from line 3, column 7717 in <anonymous 
function: dispatch>(c) in ...(file jquery)
    c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))
called via Function.prototype.apply() from line 3, column 482 in <anonymous 
function: i>(a) in ...(file jquery)
    return typeof 
f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b
 
Ciao
Nicola 
 

    if(message.constructor == String)
 
Suppongo che il problema sia esattamente quello descritto poc'anzi,
cercando un nodo con tagname "delete-message", e non trovandolo, il
metodo `html()` restituisce `null` invece che una stringa, rilanciando
un eccezione a questo check.

la funzione viene eseguita.
 
Fammi indovinare... e se nella funzione mettiamo return false; esce
e non passa al link, altrimenti passa al link?
 
Sono riuscito addirittura a far evidenziare la riga cliccata per la modifica 
col colore giallo
inserendo nella tua funzione:
 
$("a[href=#edit]").click(function(event) {
     if (current) {
         current.show();
      }
        current = $(event.target).closest("tr");
        current.hide();
 
      //evidenzia la riga scelta
      editable.addClass("selected");   <<---------------------
    ....
 
dove "selected" è una classe che setta bgcolor a giallo,
va bene?
 
Come cicliegina sulla torta c'è solo un ultimo problemuccio da risolvere:
 
Per non sconvolgere il layout dei campi di modifica, ho inserito nella 
funzione
per validare l'opzione che deposita i messaggi di errore in un div apposito, 
così:
 
errorPlacement: function(error,element){},
   showErrors: function(errorMap, errorList) {
    var list="";
    for(i in errorList){
     j = parseInt(i)+1;
     list=list+"<label>Errore: "+errorList[i].message+"<br /></label>";
    }
    $("#updateForm").find("label").remove();
    $("#updateForm").append(list);
 
    this.defaultShowErrors();
  }
 
che vanno a finire in un div posizionato dopo la chiusura del form:
 
<div id="formError"></div>
 
Ora, mi piacerebbe mettere questo div PRIMA del form, ma anche se
lo metto fisicamente prima mi appare sempre alla fine.
 
Ho provato a modificare:
$("#updateForm").append(list);
in
$("#updateForm").prepend(list);
 
e in quasto caso lo mette prima, ma è come se andasse a finire
in una cella aggiunta alla prima colonna del form, che è larga pochi px,
quindi mi ficca tutto dentro andando 2-3 volte accapo.
 
Non capisco perchè, anche se il div sta FUORI dal form, la fun me lo mette
in una cella di questo.
 
Ciao
Nicola
 

    }
 
Io eviterei di avere codice HTML all'interno del codice JS, in linea
generale. Comunque, non sono sicuro se il tuo problema dipenda dal tuo
codice HTML o dal plugin di validazione in sé. In ambo i casi, non credo
di poterti aiutare a meno che tu non crei una pagina HTML stand alone
(tipo il mio esempio di qualche post fa) dove replichi il problema, che
possa vedere. In questo modo posso cercare di capire dove sta il
problema. Altrimenti alla cieca mi riesce difficile, potrebbe essere
qualunque cosa (un errore o racing condition a livello di JS, un
comportamento del plugin, una questione di HTML, etc).

comportamento del plugin, una questione di HTML, etc).
 
mi studio la cosa meglio
 
Una domanda che sorge spontanea:
se ho capito bene, questa:
var inputs = editable.find("input");
va a cercare i tag input.
E se insieme a questi ci sono anche
select o ceckbox???
come modifico il tutto?
 
Ciao
Nicola
 
 

 come modifico il tutto?
 
Un po' di iniziativa, suvvia. :)

 Un po' di iniziativa, suvvia. :)
 
eh! Fai presto a parlare tu che conosci così bene tutto!
 
ciao
Nicola
 
 

 eh! Fai presto a parlare tu che conosci così bene tutto!
 
Non so bene tutto, grazie a Dio in questo ambiente c'è sempre qualcosa
di nuovo da scoprire o da imparare – sarebbe una barba, altrimenti.
 
E quel che so, l'ho imparato facendo prove, leggendo la documentazione
online, essendo curioso e sperimentando qua e la. :)
 
 

online, essendo curioso e sperimentando qua e la. :)
 
certo, anche io faccio prove, è da qualche settimana che ho deciso di 
utilizzare jquery
e ora sto sperimentando le sue potenzialità.
Grazie ai tuoi insegnamenti apprendo velocemente.
Ad esempio, ora ho aggiunto alla tua funzione questa:
 
$("a[href=#out]").click(function(event) {
   editable.hide();
  current.show();
});
 
sul link nella parte nascosta dell'editing:
<a href="#out" title="Annulla" class="link-command out"></a>
 
che consente di uscire dall'edit della riga e tornare ai dati
 
l'ho fatta bene? :-)
 
Se hai tempo... guardati anche l'altro mio thread recente
 
ciao
Nicola
 
 

 l'ho fatta bene? :-)
 
A livello di JS direi di si, a livello di HTML dipende dal CSS e dalle
classi `link-command` e `out`.
 

classi `link-command` e `out`.
 
.link-command {display: inline-block; width: 30px; height: 19px; 
background-repeat: no-repeat;}
.out {background-image: url(../images/esci.gif);}
 
la prima è la classe generica che ho applicato a tutti i link usati come 
pulsante per fare qualcosa
la seconda aggiunge una freccia in background per uscire dall'edit (in altri 
sarà un'altra immagine).
 
 
-- ciao!
 
...nixs.................................................................
nixs.lucchetto.@lagirandola.it
 
togli la ".SERRATURA." per scrivermi
........................................................................
L'uomo non smette di giocare perché invecchia,
ma invecchia perché smette di giocare.
(George Bernard Shaw) 
 

 .out {background-image: url(../images/esci.gif);}
 
Ok, va benissimo. Visto che out è univoco direi di usare un id e di
dargli un nome più esplicativo. Qualcosa tipo:
 
    .link-command { ... }
    #command-close { ... }
 
E quindi avere:
 
    <a id="command-close" class="link-command" href="#">..</a>
 
Oppure:
 
    .link-command { ... }
    #close-editable { ... }
 
Etc.
 
Comunque vedi tu. L'id, a prescindere dal valore, è sicuramente più
indicato.