2014-01-05 4 views
0

Мой код отлично работает here.
Но проблема в том, что я хочу добавить некоторую проверку кода, чтобы форма не могла быть отправлена, если что-то не так в коде. Вот код, я добавил:Должен ли я подтвердить свою форму дважды?

Jquery код:

var user = document.getElementById('u'); 
var email = document.getElementById('em'); 
var pass1 = document.getElementById('p1'); 
var pass2 = document.getElementById('pa2'); 
function isEmpty(input) { 
    if (input.value == "" || input.value == null) { 
    return true; 
    } else { 
    return false; 
    } 
} 

function validateform() { 
    if(isEmpty(user) || isEmpty(email) || isEmpty(pass1) || isEmpty(pass2)) 
    { 
    alert("All fields are required."); 
    $("#form").submit(function(event) { 
     event.preventDefault(); 
    }); 

    if(isEmpty(user)) 
    { 
     user.focus(); 
    } 
    else if(isEmpty(email)) 
    { 
     email.focus(); 
    } 
    else if(isEmpty(pass1)) 
    { 
     pass1.focus(); 
    } 
    else if(isEmpty(pass2)) 
    { 
     pass2.focus(); 
    } 
    } 
} 

Я также добавил Id к моей форме:

<form action="m.php" method="post" id="form"> 

Я также добавил onsubmit здесь:

<input name="submit" type='submit' value='Submit' onsubmit="validateform()"> 

, но он не работает, страница просто перемещается в m.php, даже если все поля пустые. что мне делать? должен ли я установить плагин проверки подлинности jquery и проверить дважды?

Редактировать
Вот Demo

+2

Нет, вы должны сделать вашу работу валидация первый раз вокруг (: – George

+0

@oGeez так, что случилось с моей проверки здесь, я не получаю ошибки! –

+0

«но он не работает, страница просто перемещается в m.php» - отсутствует «return false», если проверка завершается неудачно - или форма будет просто продолжена и отправлена ​​ –

ответ

1

Не нужно дважды проверить.

JS:

function isEmpty(input) { 
    return $.trim(input.value) == ""; 
} 

function validateform() { 
    var user = document.getElementById('u'); 
    var email = document.getElementById('em'); 
    var pass1 = document.getElementById('p1'); 
    var pass2 = document.getElementById('pa2'); 

    if(isEmpty(user) || isEmpty(email) || isEmpty(pass1) || isEmpty(pass2)) 
     alert("All fields are required."); 

    if(isEmpty(user)){ 
     user.focus(); 
     return false; 
    }else if(isEmpty(email)){ 
     email.focus(); 
     return false; 
    }else if(isEmpty(pass1)){ 
     pass1.focus(); 
     return false; 
    }else if(isEmpty(pass2)){ 
     pass2.focus(); 
     return false; 
    } 
    return true; 
} 

$('form#myForm').submit(function(e){ 
    e.preventDefault(); 
    if(validateform()) //just validate once! 
     this.submit(); //and then submit once; 
    return false; 
}); 

HTML:

<form action="m.php" method="post" id="myForm"> 
    ..... 
    ......Other form settings.... 
    ..... 
    <input name="submit" type='submit' value='Submit'> 
</form> 
+0

спасибо, что это сработало, можете ли вы объяснить, что вы сделали? –

+0

@ user689: на самом деле то, что вы хотите знать? Я только что обновил ваш код! Пожалуйста, спросите в деталях, чтобы я мог ответить :) –

+1

Также убедитесь, что вы также проверяете на сервере, то есть в своем PHP-скрипте. Валидация на стороне клиента хороша, но легко обойти! – CompuChip

2

После проверки, если поле будет пустым, если вы return false; то из не представит.
Форма на отправке example.

JavaScript

function validateform() { 
    if(isEmpty(user)) 
    { 
     user.focus(); 
     return false; 
    } 
    else if(isEmpty(email)) 
    { 
     email.focus(); 
     return false; 
    } 
    else if(isEmpty(pass1)) 
    { 
     pass1.focus(); 
     return false; 
    } 
    else if(isEmpty(pass2)) 
    { 
     pass2.focus(); 
     return false; 
    } 
} 

onsubmit Ваши потребности быть на вашей форме не ваша кнопка.
HTML

<form action="m.php" method="post" id="form" onsubmit="validateform()"> 
<input name="submit" type='submit' value='Submit' > 
+0

Я пробовал это, прежде чем задавать вопрос и теперь, но он все еще не работает, должен ли я удалить event.preventdefault(); –

+0

@ user689 да сделайте ваш метод validateform похожим на мой –

+0

все еще не работает, см. Этот http://jsfiddle.net/vPSm6/5/ –

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