Javascript表单验证,如何启用按钮并检查详细信息(更多详细信息)

Javascript表单验证,如何启用按钮并检查详细信息(更多详细信息),javascript,validation,Javascript,Validation,好的,下面是我的验证工作原理 有三个文本框姓名|电子邮件|信息。 Onchange它们中的每一个都运行一个函数来验证它们并向计数器添加1 函数有:email()、name()、message()。 我有另一个名为CheckBut的函数,它通过确保计数器==3来检查每个文本框是否已被验证。然后启用发送按钮 在每个函数中,电子邮件、消息、我的姓名{counter++,CheckBut()} 问题出在这里:用户将右键输入姓名,然后单击电子邮件字段。然后将运行名称的验证代码。然后,他们输入电子邮件并单击

好的,下面是我的验证工作原理

有三个文本框姓名|电子邮件|信息。

Onchange它们中的每一个都运行一个函数来验证它们并向计数器添加1

函数有:
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(用户可以通过上下文菜单查看过去的文本)