在提交和调用servlet之前调用javascript验证函数
我试图验证表单,然后调用servlet,结果失败,因为表单无效。我在下面粘贴了一些代码。你能在这个问题上给我一些提示和帮助吗在提交和调用servlet之前调用javascript验证函数,java,javascript,servlets,Java,Javascript,Servlets,我试图验证表单,然后调用servlet,结果失败,因为表单无效。我在下面粘贴了一些代码。你能在这个问题上给我一些提示和帮助吗 函数validateForm() { if(document.frm.username.value==“”) { 警报(“用户名不能为空”); document.frm.username.focus(); 返回false; } else if(document.frm.pwd.value==“”) { 警报(“密码不能为空”); document.frm.passwor
函数validateForm()
{
if(document.frm.username.value==“”)
{
警报(“用户名不能为空”);
document.frm.username.focus();
返回false;
}
else if(document.frm.pwd.value==“”)
{
警报(“密码不能为空”);
document.frm.password.focus();
返回false;
}
}
登录示例
输入用户名:
输入密码:
您正在使用document.frm
引用您的表单,但您的表单名称是loginform
,而不是frm
。因此,如果要依赖自动创建的文档
属性,则需要document.loginform
我宁愿不依赖他们。相反,您可以将表单引用传递到验证函数:
…然后在函数中使用参数:
函数验证窗体(frm)
{
如果(frm.username.value==“”)
{
警报(“用户名不能为空”);
frm.username.focus();
返回false;
}
else if(frm.pwd.value==“”)
{
警报(“密码不能为空”);
frm.password.focus();
返回false;
}
}
(当然,我仍然依赖于自动属性,在这里是表单对象。如果我真的想避免它们,我可以使用frm.querySelector(“[name=username]”)作为用户名字段和frm.querySelector(“[name=password]”)作为用户名字段)
用于密码字段。所有现代浏览器和IE8都有querySelector
。但至少只依赖表单上的选项比担心文档中的所有内容要复杂一些
这是您的表单和上面的代码片段,修改了操作以将您带到google.com(修改了方法以获取;这两个mod都只是用于演示):使用空白用户名或密码尝试,您会注意到表单不会提交:
函数验证窗体(frm)
{
如果(frm.username.value==“”)
{
警报(“用户名不能为空”);
frm.username.focus();
返回false;
}
else if(frm.pwd.value==“”)
{
警报(“密码不能为空”);
frm.password.focus();
返回false;
}
}
输入用户名:
输入密码:
如下更改javascript函数
function validateForm(event)
{
event.preventDefault(); // this will prevent the submit event.
if(document.loginform.username.value=="")
{
alert("User Name can not be left blank");
document.loginform.username.focus();
return false;
}
else if(document.loginform.password.value=="")
{
alert("Password can not be left blank");
document.loginform.password.focus();
return false;
}
else {
document.loginform.submit();// fire submit event
}
}
另外,在函数调用中传递submit事件,如下所示
<form name="loginform" action="login" method="post" onSubmit="return validateForm(event);">
Crowder提供的方法很好,但如果验证失败,您可能还必须处理触发的提交事件
即将给出同样的答案。但是现在我不想重复这个答案。他用错误的方式调用他的表单。好,catchT.J。克劳德非常感谢你的帮助!这几乎是我想要的,但还有一个问题需要解决。当我将用户名留空时,我会收到一条消息,所以它正在验证,但在这之后,将调用留空用户名文本框servlet。你能帮我个忙吗?@user3607625:不应该,你展示的代码不应该。我添加了一个片段来演示。仍然是相同的问题。验证后,它会将我重定向到servlet。你检查过小提琴了吗?这很有效!阻止提交通过允许您在提交之前验证servlet驱动的表单来提供价值。提交后,servlet将通过RequestDispatcher重定向uri,您无法控制验证then@rnyunja,您是对的,这就是为什么preventDefault很有用,并且只有在清除客户端验证时才提交表单。但我们不应该完全依赖于客户端验证