Javascript表单验证,如何启用按钮并检查详细信息(更多详细信息)
好的,下面是我的验证工作原理 有三个文本框姓名|电子邮件|信息。 Onchange它们中的每一个都运行一个函数来验证它们并向计数器添加1 函数有:Javascript表单验证,如何启用按钮并检查详细信息(更多详细信息),javascript,validation,Javascript,Validation,好的,下面是我的验证工作原理 有三个文本框姓名|电子邮件|信息。 Onchange它们中的每一个都运行一个函数来验证它们并向计数器添加1 函数有:email()、name()、message()。 我有另一个名为CheckBut的函数,它通过确保计数器==3来检查每个文本框是否已被验证。然后启用发送按钮 在每个函数中,电子邮件、消息、我的姓名{counter++,CheckBut()} 问题出在这里:用户将右键输入姓名,然后单击电子邮件字段。然后将运行名称的验证代码。然后,他们输入电子邮件并单击
email()、name()、message()。
我有另一个名为CheckBut的函数,它通过确保计数器==3来检查每个文本框是否已被验证。然后启用发送按钮
在每个函数中,电子邮件、消息、我的姓名{counter++,CheckBut()}
问题出在这里:用户将右键输入姓名,然后单击电子邮件字段。然后将运行名称的验证代码。然后,他们输入电子邮件并单击消息字段,这将运行电子邮件字段的验证代码
当他们输入消息时,他们不能点击按钮,因为按钮被禁用,并且验证消息字段的功能在他们点击其他地方之前不会运行。我怎样才能解决这个问题?我正在考虑BLUR(),但我不知道如何运行它,使其在我的表单范围内工作。您可以使用onkeypress事件检查字段更改,如果字段在最后3-5秒内未更改,则设置timeout进行运行验证。看起来像这样
<script>
var validNameTimer = null;
function nameValidWait() {
if (validNameTimer != null) {
clearTimeout(validNameTimer);
}
validNameTimer = setTimeout(nameValid, 4000);
}
</script>
<input id="name" onkeypress="nameValidWait()" />
var validNameTimer=null;
函数名validwait(){
if(validNameTimer!=null){
clearTimeout(validNameTimer);
}
validNameTimer=setTimeout(nameValid,4000);
}
修理
将onchage替换为onkeypress您可能不应该禁用该按钮。相反,在按钮单击事件上运行所有3个验证,如果验证失败,则显示错误消息(可选)并停止执行(返回)。错误消息可以显示在HTML元素中,或者您可以使用
alert(msg)
函数。希望这会有所帮助。最好的RGD,AB我建议您将您的听众连接到onKeyUp
而不是onChange
。这将使它们在用户单击文本字段之前运行,从而确保在用户尝试单击发送按钮之前启用发送按钮
但是,通过收听
onKeyUp
,您的验证功能将执行多次,并且在用户离开name字段之前,计数器可能会增长到大于3。为了解决这个问题,我建议您删除计数器
变量,而是使用三个单独的布尔变量(例如,isNameValid
,isEmailValid
,isMessageValid
)跟踪每个值的有效性。每个验证函数只需将true
或false
分配给各自的变量CheckBut()
将被更改为仅检查所有三个变量是否为真。是否可以通过mousemove进行文本验证?或通过悬停按钮进行验证。在我看来,从onchange到onkeypress可能会发生eFIX事件,但也可能会添加onchange(用户可以通过上下文菜单查看过去的文本)