verifica mail in db con jquery e ajax. Aiuto

Stato
Chiusa ad ulteriori risposte.

lorenzo84

Utente Attivo
22 Lug 2012
239
0
16
buonasera a tutti,
ho realizzato uno script in jquery che verifica l'esistenza nel db di un indirizzo mail ed eventualmente blocca il submit.
Funziona tutto bene se non quando inserisci un indirizzo già esistente e viene visualizzato l'errore se scrivo un altro indirizzo non va avanti e rimane bloccato. Devo aggiornare la pagina e scrivere la nuova mail. Cosa mi manca nel codice? questo è il codice jquery:

codice:
Codice:
$("#emailutente").keyup(function() {


   var dati = $('#emailutente').attr('value');

    var data_send="username="+dati;

        $.ajax({
            type: "POST",
            url: "newsletter_iscrizione.php",
            data: data_send,
            success: function(data){
			if(data=='1')
			{
				$(".mail").css("border","2px solid red");
				$('#campo').html('Email Esistente');
				$("#campo").css("color","red");
				$('#UsenameField').submit(function() {
				  //alert('Handler for .submit() called.');
				  return false;
				});
				
			}
			else
			{
				//$(".mail").css("color","");
			}
             }
           });
    });
 
Ultima modifica di un moderatore:
L'errore sta nel fatto che una volta inserita un'email errata viene disabilitato l'evento submit del form, che non viene poi ripristinato quando inserisci un'email giusta. Ti consiglio di disabilitare semplicemente il pulsante di submit:
Codice:
$("#emailutente").keyup(function() {
  var dati = $('#emailutente').attr('value');
  var data_send = "username=" + dati;

  $.ajax({
    type: "POST",
    url: "newsletter_iscrizione.php",
    data: data_send,
    success: function(data) {
      if (data == '1') {
        $(".mail").css("border","2px solid red");
        $('#campo').html('Email Esistente');
        $("#campo").css("color","red");
        $('#submit').attr('disabled', true);
      }
      else {
        $('#submit').attr('disabled', false);
      }
    }
  });
});
Ovviamente devi assegnargli l'ID submit:
HTML:
<button type="submit" id="submit">Invia</button>
 
Ciao! grazie per la risposta. Ora funziona ma volevo chiederti come far sparire il messaggio "email esistente" appena l'utente cancella anche una sola parola della mail per scrivere quella nuova. è possibile?
 
Grazie mille è perfetto...

una curiosità:
se volessi passare altre variabili per il controllo come dovrei fare?
 
Ti dico come farei io. Crea il tuo form in questo modo:
HTML:
<!DOCTYPE html>
<html lang="it">
  <head>
    <meta charset="utf-8">
  </head>

  <body>
    <form method="post" action="register.php">
      <div>
        <label for="first_name">Nome:</label>
        <input type="text" name="first_name" id="first_name">
      </div>

      <div>
        <label for="last_name">Cognome:</label>
        <input type="text" name="last_name" id="last_name">
      </div>

      <div>
        <label for="username">Username:</label>
        <input type="text" name="username" id="username">
        <span id="username_error"></span>
      </div>

      <div>
        <label for="password">Password:</label>
        <input type="password" name="password" id="password">
      </div>

      <div>
        <label for="email">Email:</label>
        <input type="text" name="email" id="email">
        <span id="email_error"></span>
      </div>

      <div>
        <button type="submit" id="submit">Invia</button>
      </div>
    </form>

    <script src="http://code.jquery.com/jquery.min.js"></script>
    <script>
    // http://stackoverflow.com/a/2219966/705588
    var typewatch = (function(){
      var timer = 0;

      return function(callback, ms){
        clearTimeout(timer);
        timer = setTimeout(callback, ms);
      }
    })();

    $(function() {
      $('#email, #username').keyup(function() {
        var elem = $(this);

        typewatch(function() {
          data = {};
          data[elem.attr('id')] = elem.val();

          $.getJSON('search_user.php', data, function(result) {
            errorElem = $('#' + elem.attr('id') + '_error');

            if (result.result) {
              errorElem.text('Valore già in uso.');
            } else {
              errorElem.text('');
            }
          });
        }, 500);
      });
    });
    </script>
  </body>
</html>
Il file search_user.php dovrà restituire un array JSON contenente result => true se l'utente con il dato specificato esiste, altrimenti result => false.

Ovviamente ci sono da sistemare alcune cose, tra cui gli stili del form, ma la linea generale è quella. In questo modo puoi controllare l'esistenza nel database di campi diversi con lo stesso codice (basta aggiungere selettori).
 
grazie mille!!!
volevo chiederti come mai :

<div id="bottoneredirect">dmokdmoskdmm</div>


$('#bottoneredirect').click(function (){
$(window.location).attr('href', 'https://www.mrw.it');
});

non funziona?
eppure sembra una cosa banale ma non vuole funzionare.
dove sbaglio?
 
non capisco dove sta l'errore. Potrebbe essere che va in conflitto con il menù della pagina anch'esso in jquery?
 
In effetti non credo ci sia nessun errore. Ho fatto una prova veloce:
HTML:
<!DOCTYPE html>
<html lang="it">
	<head>
		<meta charset="utf-8">
		<title>Prova</title>
	</head>

	<body>
		<div id="test">aaaaaaa</div>
		
		<script src="http://code.jquery.com/jquery.js"></script>
		<script>
		$(function() {
			$("#test").click(function() {
				$(window.location).attr("href", "http://www.google.it");
			});
		});
		</script>
	</body>
</html>
E sembra funzionare correttamente.
 
Stato
Chiusa ad ulteriori risposte.

Discussioni simili