2013-07-15 3 views
1

Я проверяю даты в функции ниже. Если проверка не удалась, форма не должна быть отправлена. Я попытался вернуть false в форме onsubmit, но он все равно отправляется. Тем не менее, валидация работает нормально и получает предупреждение, которое я вставляю в функцию. Любая помощь, чтобы прекратить отправку формы, если проверка не удалась.stopping form submit, если проверка не выполнена.

<script> 
    function dateCheck() 
    { 
     start = document.getElementById('name3').value; 
     end = document.getElementById('name4').value; 
     compare(start, end); 
     document.getElementById('name4').focus(); 

    } 

    function compare(sDate, eDate) 
    { 

     function parseDate(input) { 
      var parts = input.match(/(\d+)/g); 

      return new Date(parts[2], parts[0]-1, parts[1]); // months are 0-based 
      } 
     var parse_sDate = parseDate(sDate); 
     var parse_eDate = parseDate(eDate); 
     parse_sDate.setFullYear(parse_sDate.getFullYear() + 1); 

     if(parse_eDate >= parse_sDate) 
      { 
      alert("End date should not be greater than one year from start date"); 
      return false; 
      } 
     return true; 
    } 

</script> 
</head> 
<body> 
<form onsubmit="return dateCheck()"> 
<table> 
<tr> 
<td><input type="text" name="soname3" id="name3" size="15" readonly="readonly"> 
<img src="../Image/cal.gif" id="" style="cursor: pointer;" onclick="javascript:NewCssCal('name3','MMddyyyy','dropdown',false,'12')" /></td> 
<td><input type="text" name="soname4" id="name4" size="15" readonly="readonly"> 
<img src="../Image/cal.gif" id="" style="cursor: pointer;" onclick="javascript:NewCssCal('name4','MMddyyyy','dropdown',false,'12'); " /> </td> 
</tr> 
</table> 
<input type="submit" value="Submit"> 
</form> 
+4

Вы забыли добавить возвращенную ложное утверждение функции DateCheck? – EricLaw

ответ

8

просто комментарий:

Если слушатель передает ссылку на форму, вы получите доступ к управлению по имени или ID:

<form onsubmit="return dateCheck(this)"> 

затем:

function dateCheck(form) { 
    var start = form.name3.value; 
    ... 
} 

Обратите внимание, что вы должны объявлять переменные, иначе они станут глобальными в точке, которой они назначены. Кроме того, вы должны проверить значения в элементах управления, прежде чем передавать их в функцию сравнения (и отобразить сообщение с просьбой ввести действительное значение, если это не так).

function dateCheck(form) { 
    var start = form.name3.value; 
    var end = form.name4.value; 
    var valid = compare(start, end); 

    if (!valid) form.name4.focus(); 

    return false; 
} 
0

вы можете добиться того же, используя jQuery Form Plugin.

$(document).ready(function() { 

    $('#your_form_id').ajaxForm({ beforeSubmit: dateCheck }); 
}); 
+1

За исключением того, что OP не использует jQuery или AJAX. – RobG

+0

* sidenote: * Я предпочитаю плагин проверки достоверности jQuery, который включает в себя функцию плагина, который вы цитировали, а также расширенные функции проверки формы. – Raptor

0

return не собирается останавливаться на форму из представить, если его называют в подфункции, например, compare(sDate, eDate)

так изменить свою функцию в этом

function dateCheck(e){ 

    var start = document.getElementById('name3').value; 
    var end = document.getElementById('name4').value; 
    if(compare(start, end)) { 
    // no error submit i guess 
    // return true ? 
    } else { 
    // error with date compare 
    return false; 
    } 
    end.focus(); 

} 
+0

№. Подход OP прекрасен. не нужно использовать 'preventDefault()'. Результат проверки верности на событии 'onsubmit' отлично работает. – Raptor

+0

Цель состоит в том, чтобы отменить отправку только в случае сбоя проверки. Для этого слушатель submit просто возвращает * false *. – RobG

+0

@ShivanRaptor я отредактировал свой вопрос на основе вашего комментария –

2

Я ценю все представленные выше вклады. Я только что применил вышеприведенные предложения, чтобы решить свою задачу. & работает отлично. Держа это просто я использую следующее:

<form id="newuser" action="newuser.php" onsubmit="return pswderr(this)"> 

Для кнопки У меня есть

<input id='submit' type="submit" value="Login" onClick="return pswderr();"> 

Мой сценарий:

<script> 
function pswderr() { 
    var pswd1 = document.getElementById("newuserpswd").value; 
    var pswd2 = document.getElementById("rptpswd").value; 
    if (pswd1 !== pswd2) { 
     document.getElementById("alarm").innerHTML = "Password and password 
     verification do not match. Retry"; 
     return false; 
    } else {document.getElementById("alarm").innerHTML = ""; 
     return true; 
     } 
} 
</script> 
0

В моем случае я использовал шаблон в ввода поле, а также дал maxlength.

Что работал со мной было, удалить атрибут длины из поля ввода

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