我有一个表单验证脚本,由调用
<form id="quote" name="quote" method="get" onsubmit="return formvalidation();" action="#">
HTML输入:
<input id="sitesinput" name="sitesinput" maxlength="3" value="0" onChange='countAndRun()' />
这是功能的一部分,工作得很好,如果输入为空、零等,则不提交表单:
var x=document.getElementsByName("sitesinput")[0].value;
if (x==null || x=="" || x==0)
{
alert("You have not selected a total amount of sites.")
return false;
}
但是,如果我添加几行,将窗口集中在输入上并给它一个红色边框,则无论输入了什么,表单都会提交:
document.getElementByName("sitesinput").style.border="1px solid #F00"
document.getElementByName("sitesinput").focus()
添加到这样的功能中:
var x=document.getElementsByName("sitesinput")[0].value;
if (x==null || x=="" || x==0)
{
alert("You have not selected a total amount of sites.")
document.getElementByName("sitesinput").style.border="1px solid #F00"
document.getElementByName("sitesinput").focus()
return false;
}
谢谢你的光临。B.
我的猜测是Javascript在某个地方失败了。如果因为.style
是undefined
而出现JS错误,则您的表单最终会发布。
您还将注意到,Javascript中没有getElementByName()
方法,但有一个getElementsByName()
方法(Elements,复数)。这很可能是造成你问题的原因。
是因为此行试图将焦点放在多个元素上吗?
document.getElementByNames("sitesinput").focus()
你可以试试
document.getElementByNames("sitesinput")[0].focus()
如评论中所述,getElementsByName
函数的拼写错误
正确的代码是:
var oInput = document.getElementsByName("sitesinput")[0];
var value = oInput.value;
if (value.length == 0)
{
alert("You have not selected a total amount of sites.")
oInput.style.border="1px solid #F00"
oInput.focus()
return false;
}
真的没有必要一遍又一遍地呼叫getElementsByName
。。调用一次,将元素存储在本地变量中并使用它。您还可以通过确保它是数字和整数来改进验证:
if (value.length == 0 || isNaN(parseInt(value, 10)))
对于该记录,存在运行时错误,因为getElementsByName
返回数组,而数组没有style
属性或focus
方法,并且在onsubmit
期间出现错误时,将提交表单。
你必须像这样尝试
var x=document.getElementsByName("sitesinput")[0].value;
if (x==null || x=="" || x==0)
{
alert("You have not selected a total amount of sites.")
document.getElementsByName("sitesinput")[0].style.border="1px solid #F00"
document.getElementsByName("sitesinput")[0].focus()
return false;
}
- document.getElementsByName返回一个数组
- 没有文档.getElementByName在javascript中,这就是导致代码中出现错误的原因