si, data mi ritorna dal server ma perché è concettualmente sbagliato come dici? io con lo stesso codice faccio il controllo sue due campi diversi (due piccioni con una fava) e mi serve distinguere se il data è riferito ad email o a username in modo da settare a true la variabile giusta e non capisco come fare altrimenti a controllare tutti i campi senza usare le variabili globali
questo è il codice per intero
codice:
var email = false;
var username = false;
var password = false;
var cpassword = false;
$(document).ready(function() {
/* disabilita il pulsante per l'invio del form */
$('input[value=register]').attr({
disabled: 'disabled'
});
/* controllo il campo username o email */
$('input[type=text]').blur(function() {
var error = false;
var name = $(this).attr('name');
var value = $(this).val();
/* controllo formato email */
if (name == 'email') {
var pattern = /^[a-z0-9._-]+@[a-z0-9.-]+\.[a-z0-9]{2,4}$/;
if (!pattern.test(value)) {
error = true;
showErrorMessage('email non valida', 'email')
}
}
/* controllo formato username */
if (name == 'username') {
pattern = /^[a-z0-9]{6,10}$/;
if (!pattern.test(value)) {
error = true;
showErrorMessage('username non valido', 'username');
}
}
/* controllo univocità campo */
if (!error) {
$.ajax({
type: 'post',
url: 'dispatcher.php',
data: 'action=check&field=' + name + '&value=' + value,
success: function(data) {
switch (name) {
case 'email':
if (data == 'ok') {
email = true;
}else {
showErrorMessage('email');
}
break;
case 'username':
if (data == 'ok') {
username = true;
}else {
showErrorMessage('username');
}
break;
}
}
});
}
});
/* controllo i campi password */
$('input[type=password]').blur(function() {
var name = $(this).attr('name');
var value = $(this).val();
if (name == 'password') {
if (value != undefined && value.length > 0) {
password = true;
} else {
showErrorMessage('password non valida', 'password');
}
}
if (name == 'cpassword') {
if (value != undefined && value.length > 0) {
var pwd = $('input[name=password]').val();
if (value == pwd) {
cpassword = true;
} else {
showErrorMessage('le password non corrispondono', 'cpassword');
}
} else {
showErrorMessage('password non valida', 'cpassword');
}
}
});
/* nascondo gli eventuali messaggi di errori per i campi validi */
if (email) {
hideErrorMessage('email');
}
if (username) {
hideErrorMessage('username');
}
if (password) {
hideErrorMessage('password');
}
if (cpassword) {
hideErrorMessage('cpassword');
}
/* se i dati nei campi sono corretti riabilito il pulsante di invio */
if (email && username && password && cpassword) {
$('input[value=register]').removeAttr('disabled');
}
/* DEBUG: stampa valori */
$('div#status > span#email').html(email ? 'true' : 'false');
$('div#status > span#username').html(username ? 'true' : 'false');
$('div#status > span#password').html(password ? 'true' : 'false');
$('div#status > span#cpassword').html(cpassword ? 'true' : 'false');
});
function showErrorMessage(message, target) {
$('span.error#' + target).html(message).css({
display: 'inline'
});
}
function hideErrorMessage(target) {
$('span.error#' + target).css({
display: 'none'
});
}
ho sostituito l'if con uno switch ma concettualmente non cambia nulla