Javascript验证表单

Javascript验证表单,javascript,Javascript,我正在使用一个具有catcha图像的表单。当用户填写表单并按submit(仅当验证码编号错误时)时,字段被重置或清除。我怎样才能防止这种情况发生? 如果访问者填写表单,按submit,预期行为是表单已提交,或者如果验证码编号错误,请保留访问者在字段中输入的信息,并要求访问者填写正确的验证码编号 以下是js: function MM_validateForm() { //v4.0 if (document.getElementById){ var i,p,q,nm,test,num,min,max

我正在使用一个具有catcha图像的表单。当用户填写表单并按submit(仅当验证码编号错误时)时,字段被重置或清除。我怎样才能防止这种情况发生? 如果访问者填写表单,按submit,预期行为是表单已提交,或者如果验证码编号错误,请保留访问者在字段中输入的信息,并要求访问者填写正确的验证码编号

以下是js:

function MM_validateForm() { //v4.0
if (document.getElementById){
var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=document.getElementById(args[i]);
  if (val) { nm=val.name; if ((val=val.value)!="") {
    if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
      if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
    } else if (test!='R') { num = parseFloat(val);
      if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
      if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
        min=test.substring(8,p); max=test.substring(p+1);
        if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
  } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
} if (errors) alert('The following error(s) occurred:\n'+errors);
document.MM_returnValue = (errors == '');
} }
函数MM_validateForm(){//v4.0
if(document.getElementById){
变量i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;

对于(i=0;i当您想要防止默认行为时,必须使用如下回调函数:

function onsubmit_handler(evt) {
    if (/* validation is ok */) {
       return true;
    }
    else { /* validation is not ok */
       evt.preventDefault();
       return false;
    }
}

yourfom.onsubmit = onsubmit_handler;

我认为在JS成功验证后(即,不是通过表单提交事件处理程序中的Ajax调用),验证码(仅)在服务器上验证,这是正确的吗?我认为您正在进行真正的HTML表单提交,而不是在后台进行Ajax表单提交,这是正确的吗


如果这两个都是真的,那么问题可能根本不在JavaScript中(我说“可能”,只是因为可以想象,您可以使用一个JS函数来清除加载时的所有表单字段或类似的内容)。当您将表单提交给服务器时,服务器会查看验证码,发现答案是错误的,然后再次显示表单(使用空值)。您需要更改服务器代码,以将用户以前的答案作为
属性包含在内(或
所选
选项
s或适用于元素类型的任何选项)当它在服务器端验证失败后写入表单时。

…后端是如何处理表单的?我认为您正在寻找一种使表单“粘性”的方法,这也涉及到服务器端的工作。验证码也应该在服务器端得到验证。我建议您查看一些关于ReCaptcha处理的教程,以获得帮助也开始了。