2016-04-05 6 views
0

Я использую следующий скрипт для проверки регистрационной формы:JavaScript перезагружает полную страницу

$(document).ready(function() { 
    $("#register").click(function() { 
     var name = $("#name").val(); 

     var email = $("#email").val(); 

     var password = $("#password").val(); 

     var cpassword = $("#cpassword").val(); 

     if (name == '' || email == '' || password == '' || cpassword == '') { 
      alert("Please fill all fields...!!!!!!"); 
     } else if ((password.length) < 8) { 
      alert("Password should at least 8 character in length...!!!!!!"); 
     } else if (!(password).match(cpassword)) { 
      alert("Your passwords don't match. Try again?"); 
     } else { 
      $.post("register.php", { 
       name1: name, 
       email1: email, 
       password1: password 
      }, function(data) { 
       if (data == 'You have Successfully Registered.....') { 

        alert("Tu cuenta de usuario ha sido creada"); 

       } 

      }); 
     } 
    }); 
}); 

Я проверяю все возможные варианты, и я обнаружил, что условия работают, но вместо того, чтобы остановить выполнение сценария, страница перезагружается после выполнения одного условия. Например, если длина пароля 6 символов, предупреждение:

alert("Password should at least 8 character in length...!!!!!!"); 

брошен, но страница перезагружает снова и весь текст в поле ввода удаляется ...

А также, когда $ .post выполняется, и ответ ожидается, предупреждение:

alert("Tu cuenta de usuario ha sido creada"); 

Не показано. Запись создается в базе данных, и страница перезагружается снова, но предупреждение не отображается.

EDIT

Это HTML часть формы:

<div class="form-bottom"> 
           <form role="form" method="post" action="#" class="login-form" id="login_form"> 
            <div class="form-group"> 
             <label class="sr-only" for="form-username">Usuario</label> 
             <input type="text" name="dname" placeholder="Usuario..." class="form-username form-control" id="name"> 
            </div> 
            <div class="form-group"> 
             <label class="sr-only" for="form-email">Email</label> 
             <input type="text" name="email" placeholder="Email..." class="form-email form-control" id="email"> 
            </div> 

            <div class="form-group"> 
             <label class="sr-only" for="form-password">Contraseña</label> 
             <input type="password" name="password" placeholder="Contraseña..." class="form-password form-control" id="password"> 
            </div> 
            <div class="form-group"> 
             <label class="sr-only" for="form-confirm-password">Confirmar Contraseña</label> 
             <input type="password" name="cpassword" placeholder="Confirmar Contraseña..." class="form-password form-control" id="cpassword"> 
            </div><br> 
            <button type="submit" name="register" id="register" class="btn">Crear cuenta de usuario</button> 


           </form> 
+0

вам также нужно вставить поддерживающий html-код. – CuriousMind

+1

try return false после отображения оповещения – uzaif

+0

Похоже, что вы отправляете страницу, проверяете регистрацию своей кнопки (если зарегистрирована кнопка), и если она находится внутри формы, иногда вы можете отправить свою форму, не заметив. –

ответ

1

В вашем изменении формы HTML следующий код кнопки

<button type="submit" name="register" id="register" class="btn">Crear cuenta de usuario</button> 

в

<button type="button" name="register" id="register" class="btn">Crear cuenta de usuario</button> 

Вот fiddle

Единственное, что изменилось, это тип кнопки.

+0

@mvasco взгляните, это может помочь –

+0

Спасибо, это правильный ответ, не нужно ничего менять. – mvasco

2

может быть вашим #Register является кнопка отправки и форма размещения

1

При нажатии на кнопку она выполняет по умолчанию для этой кнопки. Так как ваша кнопка имеет тип submit, действие по умолчанию - отправить форму. Это то, что вы видите в своем приложении - вы запускаете скрипт, а затем отправляется форма.

Для того, чтобы предотвратить, что вам нужно использовать метод preventDefault на объект события:

$("#register").click(function(e) { // <- pass event object as first parameter 
    e.preventDefault(); // <- call preventDefault to prevents form from submitting 
    var name = $("#name").val(); 
    // the rest of your code 
} 

При вызове этого метода не будет срабатывать действие по умолчанию события. В вашем случае это означает, что форма не будет отправлена, и ваш код должен работать нормально.

+0

Спасибо, но есть еще один ответ, который решает проблему. Я сохраняю ваш ответ для дальнейших вопросов. Это очень хорошее объяснение, еще раз спасибо – mvasco

1

Вы должны вернуть ложь в конце события нажатия

$(document).ready(function() { 
$("#register").click(function() { 
    var name = $("#name").val(); 

    var email = $("#email").val(); 

    var password = $("#password").val(); 

    var cpassword = $("#cpassword").val(); 

    if (name == '' || email == '' || password == '' || cpassword == '') { 
     alert("Please fill all fields...!!!!!!"); 
    } else if ((password.length) < 8) { 
     alert("Password should at least 8 character in length...!!!!!!"); 
    } else if (!(password).match(cpassword)) { 
     alert("Your passwords don't match. Try again?"); 
    } else { 
     $.post("register.php", { 
      name1: name, 
      email1: email, 
      password1: password 
     }, function(data) { 
      if (data == 'You have Successfully Registered.....') { 

       alert("Tu cuenta de usuario ha sido creada"); 

      } 

     }); 
    } 
    return false; // put this it will solve your problem 
}); 
}); 
+0

Спасибо, но есть еще один ответ, который решает проблему. – mvasco

Смежные вопросы