Validare un campo

Raccoglitore di domande e risposte relative a ScriptCase, il generatore di codice php per lo sviluppo rapido di applicazioni.
Regole del forum
Nel forum è vietato fare pubblicità senza avere l'autorizzazione dello staf di Netspecial.
Vincenzo
Messaggi: 139
Iscritto il: 11 apr 2014, 11:06

Re: Validare un campo

Messaggio da Vincenzo » 28 apr 2020, 19:12

:mrgreen:

prova a chiamare la funzione sc_set_focus , ma non l'ho mai provata in un evento ajax quindi non so se farà quello che ci si aspetta.

Altrimenti, devi fare una funzione JavaScript che mette il focus sul campo voluto, quindi una sola riga di codice tipo $('#idcampo').focus(); , e chiamarla nell'evento ajax con la funzione sc_ajax_javascript, che è espressamente citata essere richiamabile nell'evento ajaxFieldonBlur di una form.

nico_gae
Messaggi: 9
Iscritto il: 13 apr 2020, 10:22

Re: Validare un campo

Messaggio da nico_gae » 30 apr 2020, 15:40

Grazie,

ti confermo che sc_set_focus in questo caso non funziona.

Per l'altro metodo, ti confesso che ho poca esperienza o quasi niente con javascript; quindi non ho idea di come andrebbe scritto il codice, se posso inserirlo in una libreria comune di funzioni e se posso chiamarla nell'evento ajax che ho creato per quel determinato campo.
Mi spiego con un esempio; poniamo che il mio form serva per gestire una anagrafica (tabella) impiegati e che in questa anagrafica vi sia un campo 'login' che vado a validare con un evento ajax onBlur come questo e che funziona:

Codice: Seleziona tutto

$login={fld_login};
$sql_command =
	"select fld_login from tb_users where fld_login = '{fld_login}'";
	sc_lookup(ds_user, $sql_command);
if ({ds_user} != false)
	{
		$params = array(
		'title' => "Attenzione",
		'type' => "error",
		'width' => '350px',
		'confirmButtonText' => 'OK');
		$desc="La login inserita: ".$login." "."esiste già";
		sc_alert($desc, $params);
		//eventuale funzione focus
		}  else {
   		$params = array(
		'title' => "Attenzione",
		'type' => "error",
		'width' => '350px',
		'confirmButtonText' => 'OK');
		$desc="Questo campo non può essere vuoto!";
		sc_alert($desc, $params);
		//eventuale funzione focus
}
Il problema è che dopo aver dato l'OK il focus passa al campo successivo, mentre vorrei che ritornasse al campo non valido.
A questo punto posso usare la funzione nell'evento? E potresti aiutarmi con un esempio di codice?
Grazie e ciao

Vincenzo
Messaggi: 139
Iscritto il: 11 apr 2014, 11:06

Re: Validare un campo

Messaggio da Vincenzo » 01 mag 2020, 15:43

Io farei così, terrei codice PHP e JS separati, fai i controlli in PHP e poi passi il messaggio di errore ad una funzione JS, e la chiami con sc_ajax_javascript, dentro quella funzione con solo codice JS mostri il messaggio di errore e metti il focus, purtroppo è da fare in JS.

nico_gae
Messaggi: 9
Iscritto il: 13 apr 2020, 10:22

Re: Validare un campo

Messaggio da nico_gae » 02 mag 2020, 14:13

Vediamo allora se ho capito gli step:
  1. Da Programmazione-->Metodi Javascript-->Inclusione di metodo creo un nuovo metodo che chiamo ad esempio focus_return.
  2. In questo metodo inserisco la riga $('#idcampo').focus(); e salvo
  3. Questo metodo può essere richiamato con sc_ajax_javascript.
Ma idcampo cosa è? Un indice e in tal caso come lo trovo? Oppure è semplicemente il nome del campo?
Ciao e grazie ancora.

Vincenzo
Messaggi: 139
Iscritto il: 11 apr 2014, 11:06

Re: Validare un campo

Messaggio da Vincenzo » 02 mag 2020, 19:13

nico_gae ha scritto: 02 mag 2020, 14:13 Ma idcampo cosa è? Un indice e in tal caso come lo trovo? Oppure è semplicemente il nome del campo?
Ciao e grazie ancora.
mettiamo che il tuo campo nel form di SC si chiami login.
Quando SC genera il codice HTML della pagina crea un oggetto INPUT per far inserire il login, questo oggetto input ha l'attributo id che si chiama id_sc_field_login. Quindi in jquery il codice $('#id_sc_field_login).focus(); mette il focus al campo di login.
Idem per tutti gli altri campi... genera il codice del form, ed eseguilo, poi guarda il codice HTML e vedrai i vari INPUT con ognuno il proprio ID.

nico_gae
Messaggi: 9
Iscritto il: 13 apr 2020, 10:22

Re: Validare un campo

Messaggio da nico_gae » 03 mag 2020, 08:17

Grazie per il chiarimento
Trovato l'ID e provato, ma non funziona.
Cioè, se chiamo la funzione nell'evento ajax in questo modo

Codice: Seleziona tutto

$desc="La login inserita: ".$login." "."esiste già";
sc_alert($desc, $params);
sc_ajax_javascript('focus_return');
Il focus passa comunque al campo successivo.
Nel sorgente html la funzione risulta

Codice: Seleziona tutto

 function focus_return() {
   $('#id_sc_field_fld_login').focus()
 } // focus_return

Ho il sospetto che non riuscirò a risolvere questa questione.

nico_gae
Messaggi: 9
Iscritto il: 13 apr 2020, 10:22

Re: Validare un campo

Messaggio da nico_gae » 11 mag 2020, 14:27

Ciao Vincenzo,
Ho ripreso in mano il mio piccolo progetto ed ho cercato di capire un pò meglio come funzionano questi controlli JS.
Faccio un pò di chiarezza ed in primo luogo posto il contenuto dell'evento ajax onBlur

Codice: Seleziona tutto

$sql_command =
	"select fld_login, fld_usrname from tb_users where fld_login = '{fld_login}'";
	sc_lookup(ds_user, $sql_command);

if ({ds_user} === false)
	{
		$params = array(
		'title' => "Attenzione",
		'type' => "error",
		'width' => '350px',
		'confirmButtonText' => 'OK');
		$desc="Access error. Message=". {my_data_erro};
		sc_alert($desc, $params);
	}
elseif (empty({ds_user}))
	{
		$params = array(
		'title' => "Attenzione",
		'type' => "error",
		'width' => '350px',
		'confirmButtonText' => 'OK');
		$desc={lang_warning_empty};
		sc_alert($desc, $params);
		sc_ajax_javascript('focus_login');
	}
else
	{
		$v_login = {ds_user[0][0]};
		$v_usrname={ds_user[0][1]};
		$params = array(
		'title' => "Attenzione",
		'type' => "error",
		'width' => '350px',
		'confirmButtonText' => 'OK');
		$desc={lang_warning_login}."<br><b>".$v_usrname."</b>";
		sc_alert($desc, $params);
		sc_ajax_javascript('focus_login');
	}
Questo evento dovrebbe verificare soprattutto che il campo fld_login non sia vuoto o esista già.
La funzione JS focus_login contiene la sola riga $('#id_sc_field_fld_login').focus();
Se compilo il form e lo eseguo, i controlli vengono effettuati correttamente, ma il focus passa sempre al campo successivo.
Ho provato, a questo punto, a togliere l'alert e a lasciare solo la funzione del focus; a questo punto funziona correttamente e il focus ritorna al campo fld_login.
Hai qualche idea su questo comportamento?
Grazie e scusami per il disturbo

Vincenzo
Messaggi: 139
Iscritto il: 11 apr 2014, 11:06

Re: Validare un campo

Messaggio da Vincenzo » 12 mag 2020, 09:38

Secondo me si incarta, giustamente, fra codice PHP (eseguito sul server) e JS (eseguito nel browser).

Secondo me devi chiamare la funzione sc_ajax_javascript('focus_login'); a cui passi ANCHE i parametri del messaggio che vuoi mostrare.

Dentro la funzione, chiami il codice JS per mostrare il messaggio e poi il set focus, così dovrebbe fare entrambi.

Rispondi

Chi c’è in linea

Visitano il forum: Ahrefs [Bot] e 2 ospiti