Форма, не проверяющая onsubmit

Я пытаюсь проверить поля id следующей формы html на submit. По какой-то причине он не обращается к проверке JavaScript и не представляет форму как есть. Я новичок в JavaScript, поэтому трудно понять, какую ошибку я делаю. Любая помощь будет оценена.

<div>
 <div>
 <a href="<% menu_url %>" target="_blank">Menu</a>
 <% IF not session.logged_in %>
 <a href="<% login_url %>" target="_blank">login</a> 
 <% ELSE %>
 <a href="<% logout_url %>" target="_blank">log out</a>
 <% END %>

 <% IF session.logged_in %>
 <form id="frm1" method="POST" onsubmit="return idCheck(this)" action="<% identry_url %>">
 <% ELSE %>
 <a href="<% login_url %>" target="_blank">login</a> <% END %> 
</form></div>
 <div> <% msg %> </div>
 <% END %>

 <% IF flash.error %>
 <div> <% flash.error %> </div>
 <% END %>
 <% content %>
</div>


<p> <b>RackID</b>   <b>Tech Initial</b> 
   </p>

<p> <b>V  </b>  
 
 
 </p>


<p> <b>W</b> 
 
 
 
 
</p>

<p> <b>X </b>
 
  
 
 
</p>

<p> <b>Y </b>
 
 
 
 
</p>

<p> <b>Z </b>
 
 
 
 
</p>




 

и вот моя функция javascript для проверки

function idCheck() {
 "use strict";

var chkstring, prime, flds, i, id, idlen, stub, rem;
chkstring = "ABCDEFGHJKLMNPQRSTVWXYZ";
prime = chkstring.length;

 var flds =document.getElementById("frm1").querySelectorAll('input[type="text"]').;

 //Start Validation Loop
for (i = 2; i < flds.length; i++) {
 id = "";
 //get the value of the field
 id = flds[i].value;
 idlen = id.length;

 if (idlen !== 8) {
 //flds[i].style.backgroundColor = 'red';
 alert("flds[i].value is not 8 charecters long");
 return false;

 }
 stub = id.substr(0, 7);
 if (stub === 0) {
 flds[i].style.backgroundColor = 'red';
 return false;

 }
 stub = stub - 1;
 rem = stub % prime;
 if (chkstring.substr(rem, 1) !== id.substr(7, 1)) {
 flds[[i].style.backgroundColor = 'red';
 return false;

 }
 return true;
}
}
2 ответа

Эта часть вашей функции проверки немедленно выпрыгивает из-за неправильности:

var flds =document.getElementById("frm1");

 //Start Validation Loop
for (i = 2; i < flds.length; i++) {

Вы выбираете элемент формы, а затем ожидаете, что оно имеет свойство length больше 2. Это условие i < flds.length в цикле for должно быть изменено на что-то другое.

Если вы ищете итерацию по каждому из входов, вы, вероятно, захотите что-то вроде этого:

var flds = document.getElementById('frm1').querySelectorAll('input[type="text"]');

for(i = 2; i < flds.length; i++) {
 id = flds[i].value;
 ...

Запись MDN для Element.querySelectorAll содержит сведения о совместимости браузера, а также дополнительную информацию о том, что она делает.


вы должны return true когда форма действительна, поскольку onSubmit ожидает, что это будет продолжаться.

licensed under cc by-sa 3.0 with attribution.