首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript验证表单

Javascript验证表单
EN

Stack Overflow用户
提问于 2011-08-10 21:08:23
回答 2查看 166关注 0票数 0

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

下面是js:

代码语言:javascript
复制
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 == '');
} }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-10 21:11:43

当你想阻止默认行为时,你必须使用一个回调函数,如下所示:

代码语言:javascript
复制
function onsubmit_handler(evt) {
    if (/* validation is ok */) {
       return true;
    }
    else { /* validation is not ok */
       evt.preventDefault();
       return false;
    }
}

yourfom.onsubmit = onsubmit_handler;
票数 0
EN

Stack Overflow用户

发布于 2011-08-10 21:22:39

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7011282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档