0

好的,这是我的验证的工作方式

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

他们每个人的Onchange运行一个函数来验证它们并将 1 添加到计数器。

功能是: email(), name(), message().

我有另一个名为 CheckBut 的函数,它通过确保计数器 ===3 来检查每个文本框是否已被验证。然后它启用发送按钮。

在我拥有的每个功能电子邮件、消息、姓名中 {counter++, CheckBut()}

这里的问题用户将输入正确的名称,然后单击电子邮件字段。然后,这将运行名称的验证代码。然后他们输入电子邮件并单击消息字段,这将运行电子邮件字段的验证代码。

当他们输入消息时,他们不能点击按钮,因为它被禁用并且验证消息字段的功能不会运行,直到他们点击其他地方。我该如何解决这个问题?我在考虑 BLUR() 但我不知道如何运行使其在我的表单范围内工作。

4

3 回答 3

1

如果字段在过去 3-5 秒内未更改,您可以使用 onkeypress 事件检查字段更改,并使用 setTimeout 进行运行验证。看起来像这样。

<script>
    var validNameTimer = null;
    function nameValidWait() {
        if (validNameTimer != null) {
            clearTimeout(validNameTimer);
        }
        validNameTimer = setTimeout(nameValid, 4000);
    }
</script>

<input id="name" onkeypress="nameValidWait()" />

使固定

将 onchage 替换为 onkeypress

于 2013-05-08T03:45:05.557 回答
1

我建议您将听众附加到onKeyUp而不是onChange. 这将使它们在用户单击文本字段之前运行,从而确保在用户尝试单击之前启用发送按钮。

但是,通过听onKeyUp您的验证功能将被执行多次,并且您counter可能会在用户离开名称字段之前增长到大于 3。为了解决这个问题,我建议您删除该变量,而是使用三个单独的布尔变量(例如,、、、)counter来跟踪每个值的有效性。每个验证函数都会简单地将一个或分配给其各自的变量。 然后将更改为简单地检查所有三个变量是否为真。isNameValidisEmailValidisMessageValidtruefalseCheckBut()

于 2013-05-08T03:48:33.443 回答
0

您可能不应该禁用该按钮。相反,在按钮单击事件上运行所有 3 个验证,如果验证失败,则显示错误消息(可选)并停止执行(返回)。错误消息可以显示在 HTML 元素中,也可以使用alert(msg)函数。希望这会有所帮助。最佳 rgds, AB

于 2013-05-08T03:46:47.243 回答